tags:

views:

101

answers:

2

I want to get the indices of non zero elements in a matrix.for example

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

should give me something like this

row col
1    1
1    3
2    1
2    3

can any one please tell me how to do that,

Thank you

+1  A: 

There's an error in your example code - True is not defined, use TRUE.

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

which should do it:

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

to get the row/col indices:

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

to use those to index back into the matrix:

   X[cbind(row(X)[which(!X == 0)], col(X)[which(!X == 0)])]
   #[1] 1 4 3 5
mdsumner
+11  A: 
which(X!=0,arr.ind = T)
     row col
[1,]   1   1
[2,]   2   1
[3,]   1   3
[4,]   2   3

If arr.ind == TRUE and X is an array, the result is a matrix whose rows each are the indices of the elements of X

gd047
Nice pointer to the arr.ind parameter!
Tal Galili
@gd047 Thank you
Shruti
Shruti - accept his answer :)
Tal Galili
Just in time for me :) Thx
Abhijit