【问题标题】:Remove % of Items in Columns删除列中项目的百分比
【发布时间】:2021-07-30 14:11:13
【问题描述】:

我正在尝试删除存在超过 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)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我会在这里使用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))
    

    【讨论】:

    • 谢谢,总的来说,答案非常适合我所寻找的:D
    • Keep_em 所有兄弟 :)
    【解决方案2】:

    好吧,cell3 有 83% 的 NA 值 (5/6) 但无论如何你都可以 -

    ignore <- 1
    perc <- 0.8 #80 %
    df <- cbind(df[ignore], df[-ignore][colMeans(is.na(df[-ignore])) < perc])
    df
    
    #  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
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      相关资源
      最近更新 更多