R:如果满足条件,则从data.frame中删除列

时间:2018-07-22 17:41:41

标签: r data-management

我的data.frame大约有20,000列我要从此data.frame中删除跟随向量的值为1的列。

u.snp <- apply(an[25:19505], 2, mean)

我确信必须有一种直接的方法来完成此任务,但现在看不到它。任何提示将不胜感激。谢谢。

更新:感谢您的帮助。现在我尝试了以下方法:

cm <- colMeans(an.mdr[25:19505])
tail(sort(cm), n=40)

使用tail函数,我看到an.mdr的19481列中有22列的均值为= 1。接下来,我使用建议的代码删除这些列。

an.mdr.s <- an.mdr
an.mdr.s[colMeans(an.mdr.s[25:19505])==1] <- NULL

按预期,an.mdr.s比an.mdr少22列。但是,当我计算除前24列以外的所有列的均值时,我又在an.mdr.s中有22列的均值= 1。

cmm <- colMeans(an.mdr.s[25:19483])
tail(sort(cmm), n=40)

老实说,我现在不知道这是怎么回事。

2 个答案:

答案 0 :(得分:2)

使用以下命令可以轻松完成此操作:

df[colMeans(df)==1] <- NULL

答案 1 :(得分:0)

您可以通过两个简单的步骤来完成操作(df是您的数据框):

# step 1 - calculate mean for all columns and filter with mean = 1
remove_columns <- sapply(df, mean)
remove_columns <- names(remove_columns[remove_columns == 1])

# alternate using filter (just for knowledge)
## remove_columns <- names(Filter(function(x) x == 1,sapply(df, mean)))

# step 2 - remove them
df_new <- df[,setdiff(names(df), remove_columns)]
相关问题