You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:31:59