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

如何在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是处理宽转长的高效工具,步骤如下:

  1. 安装并加载tidyverse(首次运行需安装):
install.packages("tidyverse")
library(tidyverse)
  1. 转换数据格式:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:25:58