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
我有一个 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