R语言使用BRFSS数据绘制分组条形图时如何将计数转为组内百分比
代码调整方法
你可以通过新增分组占比计算的步骤,将绝对计数转换为veteran3各分组内的百分比,修改后代码如下:
brfss2013 %>% # 提前过滤两个变量的缺失值,避免无效统计 filter(!is.na(veteran3), !is.na(sleepmore)) %>% group_by(veteran3, sleepmore) %>% summarise(count = n(), .groups = "drop_last") %>% # 按veteran3分组计算每个sleepmore类别的占比 mutate(percent = count / sum(count)) %>% ggplot(aes(x = veteran3, y = percent, fill = sleepmore)) + geom_bar(stat = "identity", position = "dodge") + # 可选:将y轴显示为带百分号的格式,需要提前加载scales包 scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + labs(y = "分组内占比")
核心逻辑说明
summarise的.groups = "drop_last"参数会在统计完两个分组的计数后,仅保留veteran3作为后续计算的分组维度,此时sum(count)就是每个veteran3分组的总样本量- 如果你不想额外加载scales包,也可以直接将占比乘以100,自行拼接百分号标签:
# 替换mutate和scale_y的代码即可 mutate(percent = count / sum(count) * 100) scale_y_continuous(labels = ~paste0(.x, "%"))
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

