我有一个包含4位和6位数字的矩阵,它们基本上由2或3对数字组成,描述重叠的形状。因此,举例来说,从R中的4位或6位数中选择两位数
data1<-cbind(474440,470000,440000,40000,404400,474000).
所述矩阵的每个单元具有一个或者47
,一个44
,一个40
,或上述的一些组合,并且数量的其余部分是零。我有另一个类似的数据集,但只有两对数字,而不是三对。因此,举例来说,
data2<-cbind(5253,5200,5300,50000,5053).
同样,这种组合中包含52
,53
,50
,或者它们的一些组合。我希望能够为两个数字中的每一个选择一个逻辑矩阵,因此在data1
中选择40
将生成(TRUE,FALSE,FALSE,TRUE,TRUE,TRUE)
,并且在data2
中选择50
将生成(FALSE, FALSE, FALSE, TRUE, TRUE)
。我试图创建一个我正在寻找的唯一的两位数字的列表,并使用grepl来选择那些匹配模式的列表,但由于矩阵中表示空值的零,grepl选择了太多的细胞;例如,在data1
中查找40
将产生(TRUE, FALSE, TRUE,TRUE, TRUE, TRUE)
。
我觉得你让自己太难了。如果你把分隔符放在两个对之间,比如“ - ”,那么你不会得到一个错误的匹配?或用xx替换00值? – Eccountable
关于[将一个字符串拆分为子字符串]的这个问题可能有用(http://stackoverflow.com/questions/11619616/how-to-split-a-string-into-substrings-of-a-given-length)给你。 – thelatemail
警告:请记住'grep,gsub'函数家族将数字强制为字符。例如,'data <-474.4400e7; grepl('444',data)'会返回'TRUE'(除非你用'format'做了一些坏事,就像Sven暗示的那样)。 –