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

R中拆分含指标年份的无分隔符列名 将UNCTAD宽数据集转为长格式

解决方案

你可以直接用tidyr包的pivot_longer()函数配合正则表达式一步完成宽表转长表,无需手动拆分每个变量,在你现有代码后追加以下代码即可:

SADC_long <- SADC_DVX_VAexp %>%
  pivot_longer(
    cols = -V1, # 保留国家列V1作为标识列,其余所有列参与转换
    names_pattern = "^(.*?)(\\d{4})$", # 正则拆分列名:前半部分为指标名,末尾4位为年份
    names_to = c(".value", "Year") # .value是特殊关键字,代表把匹配到的指标名作为新列名,第二部分命名为Year列
  ) %>%
  mutate(Year = as.integer(Year)) # 将年份转为整数格式,方便后续分析

代码逻辑说明

  • 正则^(.*?)(\\d{4})$可以完美适配你的列名规则:^匹配列名开头,(.*?)非贪婪匹配提取指标名(DVX/VA_exp/FVA等),(\\d{4})匹配末尾四位年份,$匹配列名结尾
  • 无需先转成键值对再手动加宽,一步就能输出你需要的国家-年份-各指标值结构

如果你处理的数据量较大,想要更高的运行效率,也可以用你已经加载的data.table实现:

setDT(SADC_DVX_VAexp)
SADC_long_dt <- melt(
  SADC_DVX_VAexp,
  id.vars = "V1",
  measure = patterns("^DVX", "^VA_exp", "^FVA", "^GVC", "^DVA"),
  value.name = c("DVX", "VA_exp", "FVA", "GVC", "DVA"),
  variable.name = "Year"
)
# 替换年份编码为实际年份
SADC_long_dt[, Year := 1989 + as.integer(Year)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:06:03