R:返回部分字符串匹配的数组索引

时间:2016-02-05 18:35:43

标签: arrays r indexing match

假设我有一个填充1:100的10x10矩阵。我想搜索所有以'0'结尾的数字,我想要他们的[i,j]索引号。我尝试了which(..., arr.ind=T),但找不到适合它的功能。我也试过grep('0$', ...)但它只返回矩阵的一个索引作为向量。我想可以把这个数字变成二进制索引,但是有更简单的方法吗?

x <- t(matrix(1:100,nrow=10,ncol=10))
#  Output:
#  [1,]  1  10
#  [2,]  2  10
#  ...
#  [10,] 10 10

1 个答案:

答案 0 :(得分:1)

我们可以将grepl输出转换为matrix,使其与原始“x”相同dim,然后将whicharr.ind=TRUE一起使用。< / p>

which(`dim<-`(grepl('0$', x), dim(x)), arr.ind=TRUE)
#       row col
# [1,]   1  10
# [2,]   2  10
# [3,]   3  10
# [4,]   4  10
# [5,]   5  10
# [6,]   6  10
# [7,]   7  10
# [8,]   8  10
# [9,]   9  10
#[10,]  10  10

或者在不更改dim的情况下,我们将grepl输出作为logical向量,否定(!),以便TRUE变为FALSE,FALSE变为TRUE,乘以使用原始矩阵获得matrix的输出。这也会将'x'中以'0'结尾的值替换为0.然后再次否定(!),以便0转换为TRUE,其他所有转换为FALSE。使用which,我们得到对应于TRUE值的索引。

which(!x*(!(grepl('0$', x))), arr.ind=TRUE)