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

Shr*_*uti 22 r

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

X <- matrix(c(1,0,3,4,0,5), byrow=TRUE, nrow=2);
Run Code Online (Sandbox Code Playgroud)

应该给我这样的东西

row col
1    1
1    3
2    1
2    3
Run Code Online (Sandbox Code Playgroud)

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

Geo*_*tas 46

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

如果arr.ind == TRUEX是一个数组,结果是一个矩阵,其行每个都是元素的索引X


mds*_*ner 6

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

X <-matrix(c(1,0,3,4,0,5), byrow = TRUE, nrow = 2)
Run Code Online (Sandbox Code Playgroud)

应该这样做:

which(!X == 0)
X[ which(!X == 0)]
#[1] 1 4 3 5
Run Code Online (Sandbox Code Playgroud)

获取行/ col索引:

 row(X)[which(!X == 0)]
 col(X)[which(!X == 0)]
Run Code Online (Sandbox Code Playgroud)

使用那些索引回矩阵:

   X[cbind(row(X)[which(!X == 0)], col(X)[which(!X == 0)])]
   #[1] 1 4 3 5
Run Code Online (Sandbox Code Playgroud)