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

R:从矩阵中删除零行并保留行索引,r,matrix,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 2

我有一个矩阵:

      [,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),]
它删除了所有的零行,但不是将结果保留为矩阵,而是创建了一个列表

试试这个:

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
试试这个:

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

默认情况下,通过“删除”维度属性,将一行或一列的矩阵转换为向量。您可以通过向
[
添加
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"

默认情况下,通过“删除”维度属性将一行或一列的矩阵转换为向量。您可以通过向
[
添加
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"

这会再次创建列表而不是矩阵,并且不会保留行的索引这会再次创建列表而不是矩阵,并且不会保留行的索引它不会创建
列表
,它会创建
数值向量
。它不会创建
列表
,它会创建
数值向量