【发布时间】:2019-06-05 16:55:03
【问题描述】:
我有一个包含 276 列样本和 215000 行的矩阵。这些值的范围从零到某个非负值。
我将使用 mtcars 作为简化示例
我需要过滤掉少于 50%(可以是任何百分比)的样本未达到特定值的行,例如 1。
示例矩阵:
Tmtcars <- t(mtcars[1:5,c(2, 8:11)])
我需要选择至少 50% 的单元格等于或大于 1 的行。
只有“vs = c(0,0,1,1,0)”这一行不满足这个条件。因为只有 2 个单元格 (40%) 为 1 或更大。
应选择“am = c(1,1,1,0,0)”行,因为 3 个单元格 (60%) 等于或大于 1。
如果我运行 rowMeans 函数
Filtered <- Tmtcars[(rowMeans(Tmtcars) >= 1 ) >=0.5, ]
“am”行未被选中。
选择标准必须是 50% 的单元格是否符合标准,与平均值无关。
谢谢!
【问题讨论】:
-
您可能可以使用
DF3[rowMeans(DF3[,1:20] > 2) < 0.5,]之类的东西,但如果没有可重复的示例,就很难说。你能分享dput(head(DF3))的输出吗? -
如果你想要一个数据框,最好使用矩阵或长格式。如果您有不同数量的样本,那么长格式可能会有意义。逐行操作在数据帧上通常效率低下。
-
谢谢,为了清楚起见和可重复的示例,我已经编辑了问题。我可以将我的 DF 格式化为矩阵。
-