在R中将长格式数据转宽格式:扩展为多列的技术问询
嘿,这个长格式转宽格式的需求在数据处理里太普遍了!我给你准备了Python(Pandas)和R(tidyr)两种主流工具的实现方案,直接上手就能用:
Python 实现(基于Pandas)
Pandas的pivot或pivot_table函数完美适配这个场景,步骤如下:
- 先导入库并构造你的示例数据:
import pandas as pd # 构造示例长格式数据 long_data = pd.DataFrame([ [1, 1, 'A', 'County', 1, 'county1'], [1, 1, 'A', 'County', 2, 'county2'], [1, 1, 'A', 'source1', 1, 9], [1, 1, 'A', 'source1', 2, 4], [1, 1, 'A', 'source2', 1, 7], [1, 1, 'A', 'source2', 2, 2], [2, 1, 'B', 'County', 1, 'county1'], [2, 1, 'B', 'County', 2, 'county1'], [2, 1, 'B', 'source1', 1, 21], [2, 1, 'B', 'source1', 2, 9], [2, 1, 'B', 'source2', 1, 4], [2, 1, 'B', 'source2', 2, 7] ], columns=['id', 'year', 'facname', 'class_code', 'line_no', 'value'])
- 使用
pivot转换为宽格式:
wide_data = long_data.pivot( index=['id', 'year', 'facname', 'line_no'], columns='class_code', values='value' ).reset_index() # 整理列名(移除多级索引的层级名称) wide_data.columns.name = None
- 输出结果就是你要的宽格式:
id year facname line_no County source1 source2 0 1 1 A 1 county1 9 7 1 1 1 A 2 county2 4 2 2 2 1 B 1 county1 21 4 3 2 1 B 2 county1 9 7
小提示:如果你的数据存在同一个id+year+facname+line_no+class_code组合对应多个value的情况,改用pivot_table并指定aggfunc(比如aggfunc='mean'或aggfunc='sum')来聚合重复值。
R 实现(基于tidyr)
R的tidyr包提供了pivot_wider函数,专门处理长转宽,步骤同样清晰:
- 加载库并构造示例数据:
library(tidyr) # 构造示例长格式数据框 long_data <- data.frame( id = c(1,1,1,1,1,1,2,2,2,2,2,2), year = rep(1,12), facname = c(rep('A',6), rep('B',6)), class_code = c('County','County','source1','source1','source2','source2', 'County','County','source1','source1','source2','source2'), line_no = c(1,2,1,2,1,2,1,2,1,2,1,2), value = c('county1','county2',9,4,7,2,'county1','county1',21,9,4,7) )
- 使用
pivot_wider转换:
wide_data <- long_data %>% pivot_wider( id_cols = c(id, year, facname, line_no), names_from = class_code, values_from = value )
- 查看结果:
print(wide_data) #> id year facname line_no County source1 source2 #> 1 1 1 A 1 county1 9 7 #> 2 1 1 A 2 county2 4 2 #> 3 2 1 B 1 county1 21 4 #> 4 2 1 B 2 county1 9 7
小提示:如果有重复值,添加values_fn参数来指定聚合方式,比如values_fn = mean。
内容的提问来源于stack exchange,提问作者Anurag Kaushik
相关产品推荐
相关产品推荐

