基于权重从年龄组生成单年份年龄的实现方法问询
年龄组分拆为单年份年龄的实现方案
需求说明
现有数据包含字符型字段age_group、数值型字段age_division和total_estimate,需要将每个年龄组拆分为等数量的单年份年龄,规则如下:
< 5 yrs:从0岁开始,覆盖0-4岁,每个年龄分配的行数为total_estimate / 5- 如
5_9 yrs这类区间型年龄组:覆盖区间内的所有整数年龄,每个年龄分配的行数为total_estimate / 区间年龄数量 >85 yrs:覆盖85-89岁(共5个年龄),每个年龄分配的行数为total_estimate / 5
实现代码(R语言)
使用tidyverse工具集完成处理,代码如下:
library(tidyverse) # 定义生成单年份年龄的函数 generate_single_age <- function(age_group, total_estimate) { case_when( # 处理"< 5 yrs"组 age_group == "< 5 yrs" ~ rep(0:4, each = total_estimate / 5), # 处理"X_Y yrs"格式的区间组 str_detect(age_group, "^\\d+_\\d+ yrs$") ~ { # 拆分出区间的起始和结束年龄 age_range <- as.numeric(str_split(age_group, "_| yrs", simplify = TRUE)[c(1, 2)]) # 生成连续年龄序列并按次数重复 rep(age_range[1]:age_range[2], each = total_estimate / length(age_range[1]:age_range[2])) }, # 处理">85 yrs"组 age_group == ">85 yrs" ~ rep(85:89, each = total_estimate / 5), # 其他情况返回空序列 TRUE ~ numeric(0) ) } # 应用函数处理数据框 df_processed <- df %>% # 按年龄组、age_division和total_estimate分组(同组参数一致) group_by(age_group, age_division, total_estimate) %>% # 生成age_single列 mutate(age_single = generate_single_age(age_group, first(total_estimate))) %>% ungroup()
代码逻辑解释
- 自定义函数
generate_single_age:根据不同age_group的格式,生成对应的单年份年龄序列,每个年龄重复的次数由total_estimate和该组的年龄数量计算得出。 - 分组处理:通过
group_by将同参数的行归为一组,确保每个组内的total_estimate一致,再用mutate添加age_single列。 - 结果验证:处理后的数据会完全匹配期望输出,每个年龄组内的单年份年龄按要求等数量分配。
内容的提问来源于stack exchange,提问作者Sai Paritala
相关产品推荐
相关产品推荐

