R语言实现按城市、年份、职业分组的种族占比统计需求
高效计算分组种族占比及可视化方案
首先修正你的可复现数据代码(原代码中Frequency列是列表格式,需调整为数值列以适配后续计算):
set.seed(4) Race <- rep(c("Black", "White"), times = 4) Job <- rep(c("BrickLayer","Cleaner"), each = 4) City <- rep(c("New York City","New York City", "New Haven", "New Haven"), times = 4) Year <- rep(c("2018","2019"), each = 8) # 生成与数据框行数匹配的数值型Frequency列 Frequency <- sample(100:542, 16, replace = TRUE) TestFrame <- data.frame(Race, Job, City, Year, Frequency)
1. 批量计算分组种族占比
使用dplyr包的分组计算功能,一次完成所有分组的占比统计,无需手动重复操作:
library(dplyr) # 按城市、年份、职业分组,计算每个种族的占比 race_proportion_table <- TestFrame %>% group_by(City, Year, Job) %>% mutate( group_total = sum(Frequency), # 计算每组总人数 race_prop = Frequency / group_total # 计算种族占比 ) %>% select(Race, Job, City, Year, race_prop) %>% ungroup() # 查看结果(格式完全匹配需求) print(race_proportion_table, n = 16)
执行后会直接生成你需要的表格结构,所有分组的占比自动计算完成,无论数据量多大都能高效处理。
2. 可视化种族占比随年份变化
基于生成的占比表格,用ggplot2快速绘制多维度对比图:
library(ggplot2) library(scales) # 堆叠柱状图:展示不同城市+职业组合下的年度种族占比 ggplot(race_proportion_table, aes(x = Year, y = race_prop, fill = Race)) + geom_col(position = "stack", width = 0.7) + facet_grid(City ~ Job) + # 按城市和职业拆分子图 scale_y_continuous(labels = percent_format(accuracy = 1)) + # 转换为百分比显示 labs(title = "种族占比随年份变化", y = "占比", x = "年份") + theme_minimal() # 折线图:更清晰展示占比的年度变化趋势 ggplot(race_proportion_table, aes(x = Year, y = race_prop, color = Race, group = Race)) + geom_line(linewidth = 1) + geom_point(size = 3) + facet_grid(City ~ Job) + scale_y_continuous(labels = percent_format(accuracy = 1)) + labs(title = "种族占比年度变化趋势", y = "占比", x = "年份") + theme_minimal()
内容的提问来源于stack exchange,提问作者Lelleo
相关产品推荐
相关产品推荐

