R语言数据格式转换:按类别列重组带汇总行的多年份数据
R语言数据格式转换解决方案
步骤1:定义单个年份数据处理函数
先写一个函数,用来将单个年份的类别-职业向量和数值向量转换成目标格式的子数据框:
process_year <- function(year_num, cat_vec, val_vec) { # 定位每个Category的起始位置 split_idx <- grep("Category_", cat_vec) # 提取Category_A的汇总与职业数据 cat_a <- c("Sum", cat_vec[(split_idx[1]+1):(split_idx[2]-1)]) val_a <- c(val_vec[split_idx[1]], val_vec[(split_idx[1]+1):(split_idx[2]-1)]) # 提取Category_B的汇总与职业数据 cat_b <- c("Sum", cat_vec[(split_idx[2]+1):(split_idx[3]-1)]) val_b <- c(val_vec[split_idx[2]], val_vec[(split_idx[2]+1):(split_idx[3]-1)]) # 提取Category_C的汇总与职业数据 cat_c <- c("Sum", cat_vec[(split_idx[3]+1):length(cat_vec)]) val_c <- c(val_vec[split_idx[3]], val_vec[(split_idx[3]+1):length(val_vec)]) # 组合成目标结构的数据框 data.frame( Year = rep(year_num, 4), Category_A = cat_a, Value_Category_A = as.numeric(val_a), Category_B = cat_b, Value_Category_B = as.numeric(val_b), Category_C = cat_c, Value_Category_C = as.numeric(val_c), stringsAsFactors = FALSE ) }
步骤2:批量处理所有年份
将所有年份的数据整理成列表,批量处理后合并为最终数据框:
# 整理年份数据列表(可直接新增年份扩展) year_data_list <- list( list(year = 2005, cat = year_2005, val = value_2005), list(year = 2006, cat = year_2006, val = value_2006) ) # 批量处理并合并所有年份的数据 final_df <- do.call(rbind, lapply(year_data_list, function(x) { process_year(x$year, x$cat, x$val) })) # 查看转换结果 print(final_df)
代码说明
process_year函数通过grep定位每个类别的起始位置,拆分出汇总值和对应职业数据,将类别汇总替换为"Sum"后,组合成目标结构的子数据框。- 年份数据列表可快速扩展,新增年份只需在列表中添加对应的年份编号、类别-职业向量、数值向量即可,适配10+年份的需求。
- 最终通过
do.call(rbind, ...)将所有年份的子数据框合并为完整数据框,完全匹配目标格式要求。
内容的提问来源于stack exchange,提问作者evam
相关产品推荐
相关产品推荐

