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

如何在R中将含国家前缀的宽格式数据转换为指定长格式?

R语言数据结构转换实现方案

首先构造你的示例数据:

df <- data.frame(
  DE_GDP = 1:4,
  DE_INFL = 1:4,
  US_GDP = 1:4,
  US_INFL = 1:4
)

方法一:使用tidyverse工具包(推荐)

利用tidyr的宽长格式转换函数组合实现:

library(tidyverse)

result <- df %>%
  # 将所有宽格式列转为长格式,暂存列名和对应数值
  pivot_longer(everything(), names_to = "COUNTRY_VAR", values_to = "VALUE") %>%
  # 按下划线拆分列名,分离出国家和指标类型
  separate(COUNTRY_VAR, into = c("COUNTRY", "VAR"), sep = "_") %>%
  # 按指标类型转回宽格式
  pivot_wider(names_from = VAR, values_from = VALUE) %>%
  # 调整列顺序匹配目标结构
  select(GDP, INFL, COUNTRY)

print(result)

方法二:使用reshape2工具包

如果习惯传统数据重塑函数,可通过melt和dcast配合列拆分实现:

library(reshape2)

# 第一步:宽格式转长格式
melted <- melt(df, variable.name = "COUNTRY_VAR")
# 第二步:拆分列名为国家和指标字段
melted <- cbind(melted, colsplit(melted$COUNTRY_VAR, "_", c("COUNTRY", "VAR")))
# 第三步:长格式转回宽格式并调整结构
result <- dcast(melted, COUNTRY ~ VAR, value.var = "value") %>%
  slice(rep(1:n(), each = 4)) %>%
  select(GDP, INFL, COUNTRY)

print(result)

两种方法最终都会输出你需要的结构:

GDP INFL COUNTRY
1   1    1      DE
2   2    2      DE
3   3    3      DE
4   4    4      DE
5   1    1      US
6   2    2      US
7   3    3      US
8   4    4      US

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:14