如何在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
相关产品推荐
相关产品推荐

