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

R: delete columns from data.frame if condition fulfilled

我有一个 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 列以外的所有列的列均值时,我再次有 22 列列 mean=1 in an.mdr.s.

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

老实说,我现在看不到这里发生了什么。

您可以通过两个简单的步骤完成(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)]

使用以下命令应该很容易完成:

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