如何根据colSum删除列

时间:2015-03-23 17:23:00

标签: r

我想从数据框df1

中删除列总和少于150的列

我的数据框是

chr      leftPos    FLD0195  FLD0197 FLD0201 FLD0203 FLD0211    FLD0243
chr1    100260254       34    52       29        18    13       30
chr1    100735342       44   111       88        65    40       66
chr1    100805662        0    0         1         1    0         0
chr1    100839460        1    0         5         0    0         0

使用的公式I如下。它运行没有错误,但df2与df1

完全相同
    df2 <- df1[,(colSums(df1[,3:ncol(df1)]) > 100000),]

1 个答案:

答案 0 :(得分:3)

k列子集上运行布尔表达式时,您将收到k大小的逻辑向量。当在n大小的列数据集中输入时,从向量开头的n-k值被回收(直到它达到n的大小),因此选择了错误的列。在您的情况下,修复很简单,只需在逻辑向量的开头添加n-k TRUE值(因为您希望将所有n-k列保留在开头)

df1[c(rep(TRUE, 2L), colSums(df1[3L:ncol(df1)]) > 150L)]
#    chr   leftPos FLD0197
# 1 chr1 100260254      52
# 2 chr1 100735342     111
# 3 chr1 100805662       0
# 4 chr1 100839460       0