【问题标题】:Count number of Variables Missing per Value in Column计算列中每个值缺失的变量数
【发布时间】:2015-01-28 16:26:08
【问题描述】:

我目前有一个 csv,它作为数据框加载到 R 中,包含 2500 个观察值和 49 列。数据如下所示:

    Donor Year Amount
World Bank 2006 94,000
World Bank 2007 
World Bank      80,000

我正在尝试按捐赠者(这是一列)对 csv 中所有缺失值进行计数,然后将其除以总观察值以获得每个捐赠者缺失数据的比率。

对于上面的例子,它有 2 个缺失字段和 9 个总字段,数学看起来像这样:

2NA/9 个字段。

donor_empty_iati<- group_by(chad_iati, reporting.org)
summary_donor_empty_iati <- summarise(donor_empty_iati, count_empty = length(which(n==""|n==" ")), total_by_donor = count_empty/nrow*49)

order_summary_donor_empty_iati <- summary_donor_empty_iati[order(-summary_donor_empty_iati$total_by_donor),]

使用汇总或函数快速完成此操作的任何帮助都会非常有帮助。

【问题讨论】:

  • 但是,这些 2NA 值来自两列。
  • 正确,因此它正在查找列中每个值的总 NA 值,因此在示例中每个世界银行的总 NA 值。

标签: r csv


【解决方案1】:

你可以用data.table 试试这个。使用setDT 将“data.frame”转换为“data.table”。获取分组变量(“Donor”)的“计数”(.N)。默认情况下,该列将命名为“N”。而不是使用“宽”格式,在这种情况下,最好将列重塑为单列“V2”(unlist(.SD)。按“捐赠者”分组,我们可以获得NAsin“V2”的总数" (sum(is.na(V2))) 并将其除以 .N(两列为 6)和 "N" (3) 之和。

library(data.table)
 setDT(df)[, list(.N,unlist(.SD)), Donor][, 
                    list(Count=sum(is.na(V2))/(.N+N[1])), Donor]
 #      Donor     Count
 #1: World Bank 0.2222222

或使用splitvapplybase R 解决方案。按“Donor”列拆分数据集,得到 NA 值的总和(is.na(x) 返回一个矩阵)除以 as.matrix(x) 的长度(即 9)

  vapply(split(df, df$Donor), 
         function(x) sum(is.na(x))/length(as.matrix(x)), double(1L))
  #World Bank 
  #0.2222222 

或者按照@Marat Talipov 的建议

  vapply(split(df, df$Donor), 
      function(x) mean(is.na(x)), double(1L))

【讨论】:

  • 那行得通。非常感谢!最终使用了 vapply 结果。
  • 我猜你可以在这里使用mean(is.na(x))
【解决方案2】:

缺少

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多