【问题标题】:Calculate percent NA by ID variable in R通过R中的ID变量计算NA百分比
【发布时间】:2020-01-08 21:49:04
【问题描述】:

标题是不言自明的。希望在 R 中按 ID 组计算 NA 百分比。有很多关于按变量列计算 NA 的帖子,但几乎没有按行组计算。

【问题讨论】:

    标签: r na missing-data


    【解决方案1】:

    如果有多个列,按'ID'分组后,使用summarise_at循环列,用is.na创建一个逻辑向量,得到mean,然后乘以100

    library(dplyr)
    df1 %>%
       group_by(ID) %>%
       summarise_at(vars(-group_cols()), ~ 100 *mean(is.na(.)))
    

    如果我们想获得所有其他变量的百分比,

    library(tidyr)
    df1 %>%
       pivot_longer(cols = -ID) %>%
       group_by(ID) %>%
       summarise(Perc = 100 * mean(is.na(value)))
    

    或者用aggregate 来自base R

    aggregate(.~ ID, df1, FUN = function(x) 100 * mean(is.na(x)), na.action = na.pass)
    

    或者获取百分比,然后unlist,其他列,创建一个带有逻辑向量和“ID”列的table,并使用prop.table获取百分比

    prop.table(table(cbind(ID = df1$ID, 
            value = is.na(unlist(df1[setdiff(names(df1), "ID")]))))
    

    【讨论】:

    • 我收到此错误:错误:无法绑定数据,因为某些参数具有相同的名称
    • @TiberiusGracchus2020 你有data.frame还是matrix
    • @TiberiusGracchus2020 如果你能用一个小示例数据的dput更新你的帖子可能会更好
    • Dataframe... 第二个命令有效,但如果我想查看所有变量的汇总而不是单个变量的百分比
    • 漂亮!更新后的帖子就像做梦一样!再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多