You need to enable JavaScript to run this app. 如何在R中将aggregate计算的参保均值转换为百分比并完成分组趋势可视化
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中将aggregate计算的参保均值转换为百分比并完成分组趋势可视化

参保率趋势可视化实现方案

问题核心

你现在的代码逻辑其实已经算对了参保占比:因为参保状态是0/1二值变量,分组求均值的结果就是对应组的参保比例。之所以没达到你要的百分比展示效果,是几个小细节没处理:

  • 计算出来的结果是小数形式(比如0.57就是57%),没有转成大家习惯的百分比刻度
  • 图上没有直接标注每个点的具体数值,需要靠坐标轴估算
  • 生成的age_cat字段值后面带了多余的空格("below 19 "/"above 19 "),容易导致颜色匹配、分类识别出错
  • 只有散点没有连线,很难直观对比两个组随年份的变化趋势

可直接运行的实现代码

第一步:修正数据预处理逻辑

调整分类字段格式,直接把聚合结果换算为百分比单位:

# 移除分类字段的多余空格
database$age_cat[database$under19 == 1] <- "below 19"
database$age_cat[database$under19 == 0] <- "above 19"

# 聚合计算各年龄组、各年份的参保占比(转成百分比单位)
percentage <- aggregate(insured ~ age_cat + year, data = database,
                        FUN = function(x) mean(x, na.rm = TRUE) * 100)
# 重命名结果列,避免语义混淆
names(percentage)[3] <- "insurance_pct"

适配补充:如果你的insured字段是文本值(如“已参保”/“未参保”)而非0/1数值,需要先做编码转换再计算:

database$insured_num <- ifelse(database$insured == "已参保", 1, 0)
# 后续聚合时替换为insured_num字段即可正常计算占比

第二步:调整ggplot绘图逻辑

实现带数值标注、趋势连线的百分比趋势图:

library(ggplot2)

ggplot(data = percentage, aes(x = year, y = insurance_pct, color = age_cat)) +
  # 同年龄组的趋势连线
  geom_line(linewidth = 1) +
  # 对应年份的散点
  geom_point(size = 3) +
  # 直接在散点上方标注百分比数值,不需要靠坐标轴估算
  geom_text(aes(label = paste0(round(insurance_pct, 1), "%")),
            vjust = -1, size = 3) +
  # 匹配你最初设置的蓝、红配色
  scale_color_manual(values = c("above 19" = "blue", "below 19" = "red")) +
  # x轴展示1991-2008的所有年份刻度,避免年份漏看
  scale_x_continuous(breaks = seq(1991, 2008, 1)) +
  # 给数值标注预留顶部空间,避免被图边界截断
  scale_y_continuous(limits = c(0, max(percentage$insurance_pct, na.rm = TRUE) + 5)) +
  # 明确轴和图例标题
  labs(x = "年份", y = "参保人群占比(%)", color = "年龄分组") +
  # 简洁无冗余的主题
  theme_bw()

效果说明

调整后的图表会直接在每个散点上方显示对应年份、对应年龄组的参保百分比数值,两个年龄组分别用蓝色、红色连线区分,x轴完整展示1991-2008的所有年份刻度,不需要估算就能直接读出每一年的对应占比,也能清晰观察两个组的参保率变化趋势。

内容的提问来源于stack exchange,提问作者bilal hassanin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 04:54:08