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

如何在R中重塑纵向数据集:将多列转换为行

在R中将宽格式数据集转换为纵向长格式

方法1:使用tidyverse包的pivot_longer(推荐)

这是现代R生态中处理宽转长的标准工具,语法清晰灵活。

首先构造示例数据:

library(tidyverse)

# 原始宽格式数据
wide_data <- data.frame(
  ID = c(100, 200),
  y1_demo = c("A", "B"),
  y2_demo = c("B", "A"),
  y1_ex = c("A", "A"),
  y2_ex = c("B", "C"),
  stringsAsFactors = FALSE
)

执行宽转长操作:

long_data <- wide_data %>%
  pivot_longer(
    cols = -ID,  # 保留ID列,转换其余所有列
    names_to = c("Year", ".value"),  # Year存储年份标识,.value自动匹配变量名(demo/ex)
    names_pattern = "^y(\\d)_(.*)$"  # 正则拆分列名:提取年份数字和变量类型
  ) %>%
  mutate(Year = paste0("Y", Year))  # 将年份数字格式化为Y1/Y2

运行后得到的结果如下:

> long_data
# A tibble: 4 × 4
     ID Year  demo  ex   
  <dbl> <chr> <chr> <chr>
1   100 Y1    A     A    
2   100 Y2    B     B    
3   200 Y1    B     A    
4   200 Y2    A     C    

方法2:使用reshape2包的melt

如果习惯传统reshape工具链,可按以下步骤操作:

library(reshape2)

# 第一步:转成基础长格式
melted_data <- melt(wide_data, id.vars = "ID")
# 第二步:拆分变量名列
melted_data <- melted_data %>%
  separate(variable, into = c("Year", "var"), sep = "_") %>%
  mutate(Year = str_replace(Year, "y", "Y")) %>%
  # 第三步:将变量类型转回宽格式
  pivot_wider(names_from = var, values_from = value)

两种方法均可得到目标纵向数据集,优先推荐tidyverse方案,更契合现代R代码风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:20:38