计算列中每个值缺失的变量数
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
或使用 split
和 vapply
的 base 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))
失踪
我目前有一个 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
或使用 split
和 vapply
的 base 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)) 失踪