删除列中%的项目

网编 195 0
提问开始:

我尝试删除那些有超过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))
总结

以上是真正的电脑专家为你收集整理的删除列中%的项目的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。

标签: #df #电脑 #专家

  • 评论列表

留言评论