我尝试删除那些有超过90%的NA值的列,我遵循了以下步骤,但我只得到了一个值,不确定我可能做错了什么。我会期待一个实际的数据帧,我试着把as.data.frame放在前面,但这也是错误的。
链接帖子:Delete columns/rows with more than x% missing
示例DF
gene cell1 cell2 cell3 A 0.4 0.1 NA B NA NA 0.1 C 0.4 NA 0.5 D NA NA 0.5 E 0.5 NA 0.6 F 0.6 NA NA
所需的DF
gene cell1 cell3 A 0.4 NA B NA 0.1 C 0.4 0.5 D NA 0.5 E 0.5 0.6 F 0.6 NA
代码
#Select Genes that have NA values for 90% of a given cell line df_col <- df[,2:ncol(df)] df_col <-df_col[, which(colMeans(!is.na(df_col)) > 0.9)] df <- cbind(df[,1], df_col)回答开始:得票数 5
我会在这里使用dplyr。
如果要将select()与逻辑条件一起使用,则可能需要在dplyr中寻找where()选择帮助器。它可以像这样使用:select(where(condition))
我使用了80%的阈值,因为90%将保留所有列,因此也不会说明解决方案
library(dplyr) df %>% select(where(~mean(is.na(.))<0.8))
也可以使用base R和colMeans来完成:
df[, c(TRUE, colMeans(is.na(df[-1]))<0.8)]
或者用呼叫声:
library(purrr) df %>% keep(~mean(is.na(.))<0.8)
输出:
gene cell1 cell3 1 a 0.4 NA 2 b NA 0.1 3 c 0.4 0.5 4 d NA 0.5 5 e 0.5 0.6 6 f 0.6 NA
数据
df<-data.frame(gene=letters[1:6], cell1=c(0.4, NA, 0.4, NA, 0.5, 0.6), cell2=c(0.1, rep(NA, 5)), cell3=c(NA, 0.1, 0.5, 0.5, 0.6, NA))总结
以上是真正的电脑专家为你收集整理的删除列中%的项目的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。
评论列表