R 如何基于colSum删除列

R 如何基于colSum删除列,r,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 10080

我想从数据帧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
我使用的公式如下。它运行时没有错误,但df2与df1完全相同

    df2 <- df1[,(colSums(df1[,3:ncol(df1)]) > 100000),]
df2 100000),]

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


您的意思是从列总和中删除小于150的行吗?您的问题是,您只检查
df1[,3:ncol(df1)]
的总和,而从整个数据集中进行子设置。您应该做一些类似于
cbind(df[1:2],df1[3:ncol(df1)][,colSums(df1[3:ncol(df1)]>150,drop=FALSE])
OK,那么如何基于colSums>100000将@DavidArenburg代码中的150更改为10000。更好的选择是
df1[c(TRUE,TRUE,TRUE,colSums(df1[3:ncol(df1)])>150)
(在原始数据中调整150到1e5)
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