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