求助:按就业组计算毕业/未毕业占比并绘图的代码修正
修正按毕业状态拆分的就业占比计算与可视化
问题核心
现有代码未按毕业状态(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() )
关键修改说明
- 数据整理逻辑调整:仅将性别、种族、年份转为长格式分组维度,保留毕业状态和就业类别作为分析维度,避免原代码中误将毕业状态当作分组项的问题。
- 百分比计算修正:先按「分组维度+就业类别」统计总人数,再按毕业状态细分计算占比,确保每组内毕业/未毕业占比总和为100%,符合需求要求。
- 可视化优化:用堆叠柱状图展示毕业状态的占比拆分,通过fill映射明确区分两组,调整图例位置提升可读性。
内容的提问来源于stack exchange,提问作者a_todd12
相关产品推荐
相关产品推荐

