You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:按就业组计算毕业/未毕业占比并绘图的代码修正

修正按毕业状态拆分的就业占比计算与可视化

问题核心

现有代码未按毕业状态(grad)拆分占比,需调整为:在每个就业类别(0/1/2)中,统计种族、性别、年份组内毕业与未毕业人群的占比(每组内毕业/未毕业占比总和为100%)。

修正后的完整代码

library(tidyverse)

# 数据预处理:转换因子并整理格式
test2 <- test %>% 
  mutate(
    genderf = factor(2 - gender, labels = c("female", "male")),
    racef = factor(race, labels = c("white", "black", "hispanic", "otherrace")),
    yrf = factor(yr, labels = c("class '11", "class '15")),
    gradf = factor(grad, labels = c("未毕业", "毕业"))
  ) %>% 
  # 仅将性别/种族/年份转为长格式,保留毕业状态和就业类别
  pivot_longer(cols = c(genderf, racef, yrf), names_to = "group", values_to = "var") %>% 
  select(group, var, gradf, employ)

# 按要求计算百分比:组内按毕业状态拆分
test3 <- test2 %>% 
  group_by(group, var, employ) %>% 
  mutate(group_total = n()) %>% 
  group_by(group, var, employ, gradf) %>% 
  summarize(percent = round(100 * n() / group_total[1], 1), .groups = "drop") %>% 
  filter(!is.na(var))

# 生成可视化图表
ggplot(test3, aes(x = percent, y = var, fill = gradf)) +
  geom_col(orientation = "y", width = .9, position = "stack") +
  facet_grid(group ~ employ, scales = "free", space = "free_y") +
  labs(title = "按毕业状态拆分的就业人口统计",
       y = "",
       x = "百分比",
       fill = "毕业状态") +
  theme(
    legend.position = "bottom",
    strip.text.y = element_blank()
  )

关键修改说明

  1. 数据整理逻辑调整:仅将性别、种族、年份转为长格式分组维度,保留毕业状态和就业类别作为分析维度,避免原代码中误将毕业状态当作分组项的问题。
  2. 百分比计算修正:先按「分组维度+就业类别」统计总人数,再按毕业状态细分计算占比,确保每组内毕业/未毕业占比总和为100%,符合需求要求。
  3. 可视化优化:用堆叠柱状图展示毕业状态的占比拆分,通过fill映射明确区分两组,调整图例位置提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:34:58