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

时间:2015-01-28 16:26:09

标签: r csv

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用data.table尝试此操作。转换&#34; data.frame&#34;到&#34; data.table&#34;使用setDT。获得&#34;计数&#34; (.N)分组变量(&#34; Donor&#34;)。默认情况下,该列将命名为&#34; N&#34;。而不是与&#34;宽&#34;格式,在这种情况下,可能更好地将列重新整形为单列&#34; V2&#34; (unlist(.SD)。由&#34;捐赠者&#34;分组,我们可以获得&#34; V2&#34;(NAs)中sum(is.na(V2))的总数并除以.N的总和(两列为6)和&#34; N&#34;(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

使用base Rsplit的{​​{1}}解决方案。将数据集拆分为&#34; Donor&#34;列并得到NA值的总和(vapply返回一个矩阵)除以is.na(x)的长度(即9)

as.matrix(x)

或者按照@Marat Talipov的建议

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

答案 1 :(得分:1)

缺少&lt; - sum(is.na(df $ Donor)) 丢失