如何在R语言summarise函数计算占比时排除NA值
解决R语言数据框分组占比排除NA的问题
你的问题核心是分母用了整个数据集的行数(包含NA),且分组时把NA当成了一个有效类别,所以才会出现NA的占比。下面给你两种简单的解决办法:
方法一:先过滤NA再计算
先把Age_t0列中含NA的行过滤掉,再计算各组占比,此时分母是过滤后有效数据的总行数:
ileagedata %>% filter(!is.na(Age_t0)) %>% group_by(Age_t0) %>% summarise(percent = 100 * n() / nrow(.))
这里nrow(.)指代的是经过filter处理后的数据集行数,也就是有效数据的总数。
方法二:直接在计算中排除NA计数
如果不想提前过滤数据,可以在计算分母时直接统计Age_t0列非NA值的总数,最后再去掉NA对应的分组行:
ileagedata %>% group_by(Age_t0) %>% summarise(percent = 100 * n() / sum(!is.na(Age_t0))) %>% filter(!is.na(Age_t0))
其中sum(!is.na(Age_t0))会统计整个数据框中Age_t0列非NA值的总数量,确保分母是有效数据的总数;最后一步filter用来去掉结果中NA对应的行。
两种方法都能得到排除NA后的占比结果,你可以根据自己的需求选择。
内容的提问来源于stack exchange,提问作者Juliette Villx
相关产品推荐
相关产品推荐

