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

R语言面板数据框重构:合并带年份后缀的重复测量变量

R 批量合并带年份后缀面板变量方案

下面提供两种可直接复用的批量处理方案,均支持自动识别所有测量指标,无需手动逐个指定变量,适配15+指标、10个年份的处理需求:

Tidyverse 方案(语法简洁易维护)

利用tidyr的长宽表转换逻辑自动拆分变量名、匹配年份,适配任意符合「指标名_年份」命名规则的变量:

# 加载依赖包,未安装可先运行 install.packages("tidyverse")
library(tidyverse)

result <- y %>%
  # 除id、year外的所有列转长格式,拆分指标名和对应的变量年份
  pivot_longer(
    cols = -c(id, year),
    names_to = c("indicator", "var_year"),
    names_sep = "_",
    names_transform = list(var_year = as.integer)
  ) %>%
  # 仅保留变量年份与当前行年份匹配的有效取值
  filter(var_year == year) %>%
  # 转回宽格式得到合并后的单个指标列
  pivot_wider(
    id_cols = c(id, year),
    names_from = indicator,
    values_from = value
  )

基础R 方案(无第三方包依赖,处理速度更快)

通过字符串匹配提取指标名,用矩阵索引批量取值,适合大数据量场景:

# 提取所有唯一的测量指标名(自动去重,无需手动录入)
indicators <- unique(sub("_[0-9]{4}$", "", names(y)[!names(y) %in% c("id", "year")]))

# 遍历每个指标,匹配对应年份的取值生成新列
for (ind in indicators) {
  target_col <- paste0(ind, "_", y$year)
  # 矩阵索引快速定位取值,效率远高于逐行遍历
  y[[ind]] <- y[cbind(seq_len(nrow(y)), match(target_col, names(y)))]
}

# 仅保留需要的最终列
result <- y[, c("id", "year", indicators)]

两种方案运行后得到的result均与给出的预期输出结构完全一致。

内容的提问来源于stack exchange,提问作者R9413

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:51:03