В вашем примере кода есть ошибка - 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