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

