找到矩阵中非零元素的索引

时间:2010-07-07 07:45:40

标签: r

我想在矩阵中得到非零元素的索引。例如

X <- matrix(c(1,0,3,4,0,5), byrow=TRUE, nrow=2);

应该给我这样的东西

row col
1    1
1    3
2    1
2    3

任何人都可以告诉我该怎么做?

2 个答案:

答案 0 :(得分:45)

which(X!=0,arr.ind = T)
     row col
[1,]   1   1
[2,]   2   1
[3,]   1   3
[4,]   2   3

如果arr.ind == TRUEX是一个数组,则结果是一个矩阵,其每行都是X

元素的索引

答案 1 :(得分:6)

示例代码中存在错误 - 未定义True,请使用TRUE。

X <-matrix(c(1,0,3,4,0,5), byrow = TRUE, nrow = 2)

应该这样做:

which(!X == 0)
X[ which(!X == 0)]
#[1] 1 4 3 5

获取行/列索引:

 row(X)[which(!X == 0)]
 col(X)[which(!X == 0)]

使用那些索引回矩阵:

   X[cbind(row(X)[which(!X == 0)], col(X)[which(!X == 0)])]
   #[1] 1 4 3 5