假设我有一个填充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
答案 0 :(得分:1)
我们可以将grepl
输出转换为matrix
,使其与原始“x”相同dim
,然后将which
与arr.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)