计算列中每个值缺失的变量数

Count number of Variables Missing per Value in Column

我目前有一个 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),]

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

你可以用 data.table 试试这个。使用 setDT 将 "data.frame" 转换为 "data.table"。得到分组变量("Donor")的"count"(.N)。默认情况下,该列将被命名为 "N"。在这种情况下,最好不要使用 "wide" 格式,而是将列重塑为单列 "V2"(unlist(.SD)。按 "Donor" 分组,我们可以获得总数NAs 在 "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) returns 矩阵)除以 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))

缺少<-总和(is.na(df$Donor)) 失踪