如何在R中批量实现季度就业占比计算及抑制项占比判断
R中就业数据年度重复处理方案
需求
完成三项可年度重复执行的数据处理任务:
- 新增季度总就业列
- 新增区域就业相对占比列(需显示数值,如0.0115而非2/173)
- 判断
suppress=0的就业总和是否超过该季度总就业的50%,生成判断列
样本数据
area <- c("001","005","007","009","011","013","015","017","019","021","023","027","033","001","005","007","009","011","013","015","017","019","021","023","027","033") year <- c("2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021","2021") qtr <- c("01","01","01","01","01","01","01","01","01","01","01","01","01","02","02","02","02","02","02","02","02","02","02","02","02","02") employment <- c(2,4,6,8,11,10,12,14,16,18,20,22,30,3,5,8,9,12,9,24,44,33,298,21,26,45) suppress <- c(0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0) testitem <- data.frame(year,qtr, area, employment, suppress)
期望结果
- 2021年Q1总就业173,
suppress=1的就业总和24,未达总就业50%,50percent列显示TRUE - 2021年Q2总就业537,
suppress=1的就业总和310,超过总就业50%,50percent列显示FALSE - 区域占比为数值形式(如2/173对应0.0115)
示例片段:
year qtr area employment suppress area_ratio 50percent 2021 01 001 2 0 0.0115 TRUE 2021 01 005 4 0 0.0231 TRUE ..... 2021 02 001 3 0 0.0056 FALSE 2021 02 005 5 0 0.0093 FALSE
实现代码(dplyr)
使用dplyr进行分组计算,代码可直接复用处理年度数据:
# 安装并加载dplyr包(首次运行需安装) # install.packages("dplyr") library(dplyr) processed_data <- testitem %>% group_by(year, qtr) %>% mutate( # 季度总就业 total_employment = sum(employment), # 区域就业占比(保留4位小数) area_ratio = round(employment / total_employment, 4), # 判断suppress=0的就业总和是否超过季度总就业的50% 50percent = sum(employment[suppress == 0]) > 0.5 * total_employment ) %>% ungroup() # 查看处理后的数据 print(processed_data)
代码解释
group_by(year, qtr):按年份和季度分组,确保所有计算基于单季度数据total_employment = sum(employment):计算每个季度的总就业人数area_ratio = round(employment / total_employment, 4):计算区域就业占比并保留4位小数50percent = sum(employment[suppress == 0]) > 0.5 * total_employment:筛选suppress=0的就业数据求和,与季度总就业的50%比较,返回布尔值ungroup():取消分组,恢复普通数据框格式
内容的提问来源于stack exchange,提问作者Tim Wilcox
相关产品推荐
相关产品推荐

