R 如何基于colSum删除列
我想从数据帧df1的列总和中删除小于150的列 我的数据帧是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
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