我在一个非常大的矩阵(184 x 4000,类型 double)中有很多行和列,我想删除所有 0。矩阵中的值通常大于 0,但也有一些行为 0.0000 。我尝试使用以下方法删除带零的行:
x <- x[which(rowSums(x) > 0),]
但我剩下的只是 184 行中的 3 行。而且我知道删除的 181 行并不全是 0 行。
有谁知道为什么会发生这种情况以及我该如何解决它?我在具有相同结构(184 行,4000 列)的不同矩阵上使用了相同的代码,并且它有效。我缺少什么?
您可以像这样删除仅包含 0 的行(如果您想删除仅包含该数字的行,则可以将 0 替换为任何其他数字):
x <- x[rowSums(x == 0) != ncol(x),]
解释:
-
x == 0
创建逻辑值矩阵(TRUE/FALSE)并rowSums(x == 0)
将它们相加(TRUE == 1,FALSE == 0)。
- 然后检查每行的总和是否为not等于列数
你的矩阵(由
ncol(x)
).
- 如果是这种情况(这意味着并非所有条目都是 0),该行将被保留,因为它
评估结果为 TRUE。所有其他行的计算结果均为 FALSE,并将被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)