我目前有一个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),]
使用汇总或函数快速完成此操作的任何帮助都会非常有用。
答案 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 R
和split
的{{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)) 丢失