【发布时间】:2014-10-01 22:50:54
【问题描述】:
我正在尝试在 R 中创建一个函数,该函数将允许我根据行是否包含其中包含零的单个列来过滤我的数据集。此外,有时我只想删除所有列中为零的行。
还有,这就是有趣的地方;并非所有列都包含数字,列数可能会有所不同。
我已尝试将我的一些数据与我想要获得的结果粘贴到此处。
unfiltered:
ID GeneName DU145small DU145total PC3small PC3total
1 MIR22HG 33221.5 1224.55 2156.43 573.315
2 MIRLET7E 87566.1 7737.99 25039.3 16415.6
3 MIR612 0 0 530.068 0
4 MIR218-1 0 0 1166.88 701.253
5 MIR181B2 70723.2 3958.01 6209.85 1399.34
6 MIR218-2 0 0 0 0
7 MIR10B 787.516 330.556 0 20336.4
8 MIR3176 0 0 0 0
any rows with containing a zero removed:
ID GeneName DU145small DU145total PC3small PC3total
1 MIR22HG 33221.5 1224.55 2156.43 573.315
2 MIRLET7E 87566.1 7737.99 25039.3 16415.6
5 MIR181B2 70723.2 3958.01 6209.85 1399.34
only rows that is all zero is filtered away:
ID GeneName DU145small DU145total PC3small PC3total
1 MIR22HG 33221.5 1224.55 2156.43 573.315
2 MIRLET7E 87566.1 7737.99 25039.3 16415.6
3 MIR612 0 0 530.068 0
4 MIR218-1 0 0 1166.88 701.253
5 MIR181B2 70723.2 3958.01 6209.85 1399.34
7 MIR10B 787.516 330.556 0 20336.4
我确实找到了一种方法来删除其中至少包含 1 个零的任何行,但它通过将所有零与 NA 交换然后使用 complete.cases 进行过滤来“作弊”。
此外,通过这样做,它会删除所有 GeneName 中包含零的行(对于 MIR10B)。
我可以通过使用 for 循环来解决它,但有人告诉我,R 中的循环非常无效,因此希望避免这种解决方案。
编辑:虽然 Xin Yin 的解决方案运行良好并将数据保存在数据框中,但 David Arenburg 的回答据说效率更高,应该使用。
【问题讨论】:
-
如果
df是数据集。第一种情况是:df[!rowSums(!df[-(1:2)]),]和第二种情况df[!rowSums(!df[-(1:2)])==4,]
标签: r filtering bioinformatics data-processing