如何在R语言中将工作表转换为面板数据格式?
将宽格式数据转换为R语言面板数据格式
你的需求是把包含分年份变量的宽格式数据,转换为每行对应一个ID-年份组合的长格式面板数据。以下是具体实现方法:
示例数据
先确认你的示例数据结构:
y <- structure(list(a = 1:3, b = 5:7, c=8:10), .Names = c("ID", "X_2010","X_2011"), row.names = c(NA, -3L), class = "data.frame")
原始数据展示:
ID X_2010 X_2011 1 1 5 8 2 2 6 9 3 3 7 10
方法一:使用tidyverse包(推荐)
tidyverse中的tidyr::pivot_longer是处理宽转长的高效工具,步骤如下:
- 安装并加载tidyverse(首次运行需安装):
install.packages("tidyverse") library(tidyverse)
- 转换数据格式:
panel_data <- y %>% pivot_longer( cols = starts_with("X_"), # 指定所有以X_开头的列作为转换对象 names_to = "Year", # 生成的年份列名称 values_to = "X", # 生成的X值列名称 names_prefix = "X_" # 移除列名中的"X_"前缀,提取年份数字 )
转换后结果:
# A tibble: 6 × 3 ID Year X <int> <chr> <int> 1 1 2010 5 2 1 2011 8 3 2 2010 6 4 2 2011 9 5 3 2010 7 6 3 2011 10
若需将Year列转为数值型,可追加一步:
panel_data <- panel_data %>% mutate(Year = as.integer(Year))
方法二:使用base R的reshape函数
无需额外安装包,用base R自带函数也可实现:
panel_data_base <- reshape( y, direction = "long", # 指定转换为长格式 varying = c("X_2010", "X_2011"), # 指定要转换的列 v.names = "X", # X值列名称 timevar = "Year", # 年份列名称 times = c(2010, 2011), # 对应年份数值 idvar = "ID", # 分组依据的ID列 rownames = NULL # 重置行名 )
转换后Year列默认是数值型,结果与方法一一致。
内容的提问来源于stack exchange,提问作者RandomWalker
相关产品推荐
相关产品推荐

