gpt4 book ai didi

从数据框中删除仅包含 0 或仅包含单个 0 的行

转载 作者:行者123 更新时间:2023-12-04 09:35:21 26 4
gpt4 key购买 nike

我正在尝试在 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 的答案据说更有效,应该使用。

最佳答案

使用 data.table (假设 df 是您的数据集)

library(data.table)
setDT(df)[, .SD[!all(.SD[, -1, with = F] == 0)], by = GeneName]

# GeneName ID DU145small DU145total PC3small PC3total
# 1: MIR22HG 1 33221.500 1224.550 2156.430 573.315
# 2: MIRLET7E 2 87566.100 7737.990 25039.300 16415.600
# 3: MIR612 3 0.000 0.000 530.068 0.000
# 4: MIR218-1 4 0.000 0.000 1166.880 701.253
# 5: MIR181B2 5 70723.200 3958.010 6209.850 1399.340
# 6: MIR10B 7 787.516 330.556 0.000 20336.400

或者,如果您只想删除带有任何零的行
setDT(df)[, .SD[!any(.SD[, -1, with = F] == 0)], by = GeneName]

# GeneName ID DU145small DU145total PC3small PC3total
# 1: MIR22HG 1 33221.5 1224.55 2156.43 573.315
# 2: MIRLET7E 2 87566.1 7737.99 25039.30 16415.600
# 3: MIR181B2 5 70723.2 3958.01 6209.85 1399.340

关于从数据框中删除仅包含 0 或仅包含单个 0 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com