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

R语言中如何实现长格式数据按分组转换为宽表结构

R语言实现长表按分组转宽列的方法

你需要完成的是长格式数据转宽格式操作:将分组列的不同取值转为独立列,组内对应值按顺序逐行对齐,以下是几种可直接运行的实现方式:

1. 构造原始测试数据

先复现你提供的示例数据集:

df <- data.frame(
  Col1 = rep(c("A", "B"), each = 3),
  Col2 = rep(1:3, 2)
)

生成的原始数据结构如下:

Col1 Col2
1    A    1
2    A    2
3    A    3
4    B    1
5    B    2
6    B    3

2. 基础R实现(无需安装额外包)

直接调用内置的unstack()函数即可完成转换,公式规则为值列 ~ 分组列:

result <- unstack(df, Col2 ~ Col1)

运行后直接输出目标结构:

A B
1 1 1
2 2 2
3 3 3

3. tidyverse方案(适合日常数据处理流程)

用tidyr包的pivot_wider()函数实现,注意需要先给每组内的观测添加行序号作为对齐依据,避免生成列表列:

library(tidyr)
library(dplyr)

result <- df %>%
  group_by(Col1) %>%
  mutate(row_id = row_number()) %>%
  pivot_wider(names_from = Col1, values_from = Col2) %>%
  select(-row_id)

4. data.table方案(适合大数据量场景)

用data.table包的dcast()函数实现,处理百万级以上数据时运行速度优势明显:

library(data.table)
setDT(df)

# 为分组内观测生成匹配用的行序号
df[, row_id := rowid(Col1)]
result <- dcast(df, row_id ~ Col1, value.var = "Col2")[, row_id := NULL]

注意:如果不同分组的观测数量不一致,转换后较短分组的缺失位置会自动填充NA。

内容的提问来源于stack exchange,提问作者BERŞAN DİDAR MELET

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:21:39