R:从矩阵中删除零行并保留行索引

时间:2018-03-08 15:09:09

标签: r matrix

我有这个矩阵:

      [,1]  [,2]  [,3]  [,4]
one   0e+00 0e+00 0e+00 0e+00
two   1e-05 2e-05 3e-05 4e-05
three 0e+00 0e+00 0e+00 0e+00
four  0e+00 0e+00 0e+00 0e+00

我想删除所有零行并仍然将其保留为矩阵,不是数据框,并保持索引两个在这种情况下,输出应该是这样的:

      [,1]  [,2]  [,3]  [,4]
two   1e-05 2e-05 3e-05 4e-05

以下是代码:

mat=matrix(c(0e+00,1e-05,0e+00,0e+00,0e+00,2e-05,0e+00,0e+00,0e+00,3e-05,0e+00,0e+00,0e+00,4e-05,0e+00,0e+00), nrow=4)
rownames(mat)= c("one", "two", "three", "four")
mat=mat[which(rowSums(mat) > 0),]

它删除了所有零行,但不是将结果保留为矩阵,而是创建一个列表。

2 个答案:

答案 0 :(得分:2)

默认情况下,通过“删除”维度属性,将一行或一列的矩阵转换为向量。您可以通过将drop = FALSE参数添加到[来停止此操作。

mat=matrix(c(0e+00,1e-05,0e+00,0e+00,0e+00,2e-05,0e+00,0e+00,0e+00,3e-05,0e+00,0e+00,0e+00,4e-05,0e+00,0e+00), nrow=4)
rownames(mat) = c("one", "two", "three", "four")
mat = mat[which(rowSums(mat) > 0), , drop = FALSE]
mat
#      [,1]  [,2]  [,3]  [,4]
# two 1e-05 2e-05 3e-05 4e-05
class(mat)
# [1] "matrix"

答案 1 :(得分:0)

试试这个:

mat=matrix(c(0e+00,1e-05,0e+00,0e+00,0e+00,2e-05,0e+00,0e+00,0e+00,3e-05,0e+00,0e+00,0e+00,4e-05,0e+00,0e+00), nrow=4)
rownames(mat)= c("one", "two", "three", "four")
mat=mat[rowSums(mat==0) !=ncol(mat),]
mat