R语言用dplyr计算性别频数与占比出错,求问题原因
分组统计性别频数与占比的错误修正
问题原因
你猜的没错:当用group_by(gender)分组后,summarise函数的计算范围被限制在每个分组内部。此时sum(n)其实就是当前分组的样本数n(每组仅生成一个n值),所以n/sum(n)的结果恒为1,最终占比显示100%。
修正方案
以下几种方法都能正确计算整体占比:
方法1:提前计算总样本数
# 先获取数据框总行数 total <- nrow(df) df %>% group_by(gender) %>% summarise( 频数 = n(), 占比 = paste0(round(100 * 频数/total, 0), "%") )
方法2:在summarise中直接引用总行数
df %>% group_by(gender) %>% summarise( 频数 = n(), 占比 = paste0(round(100 * 频数/nrow(df), 0), "%") )
方法3:用add_count添加总计数列
df %>% add_count(name = "总样本数") %>% # 给每行添加总样本数 group_by(gender) %>% summarise( 频数 = n(), 占比 = paste0(round(100 * 频数/first(总样本数), 0), "%") )
运行任意一种方法,都会得到正确的结果:
# A tibble: 2 × 3 gender 频数 占比 <chr> <int> <chr> 1 female 3 60% 2 male 2 40%
内容的提问来源于stack exchange,提问作者dplyr
相关产品推荐
相关产品推荐

