如何使用pivot_wider函数实现长数据框转指定宽格式?
实现方案
你可以通过指定tidyr中pivot_wider的核心参数完成长表转宽表的需求,通用参考代码如下:
# 先加载tidyr包,已安装tidyverse的话可以直接加载tidyverse library(tidyr) # 假设你的原始长数据框名为df,替换括号内的实际列名即可 wide_df <- pivot_wider( data = df, id_cols = c(不需要转换、保留在行维度的列名), # 比如用户ID、分组列、日期列等 names_from = 取值作为新列名的列名, values_from = 填充到新列的数值所在的列名 )
常见问题处理
- 若转换后出现列表列报错,说明同一个
id_cols + names_from组合下存在重复值,可以新增values_fn参数处理重复值:- 重复值求和:
values_fn = list(数值列名 = sum) - 取第一个重复值:
values_fn = list(数值列名 = ~.x[1])
- 重复值求和:
- 若需要给生成的新列统一加前缀,可新增
names_prefix = "自定义前缀_"参数
实际示例
如果你的原始长表结构为:
| 组别 | 指标 | 数值 |
|---|---|---|
| A | 销量 | 100 |
| A | 利润 | 20 |
| B | 销量 | 150 |
| B | 利润 | 30 |
想要转换为如下宽表:
| 组别 | 销量 | 利润 |
|---|---|---|
| A | 100 | 20 |
| B | 150 | 30 |
对应实现代码:
wide_df <- pivot_wider( data = df, id_cols = 组别, names_from = 指标, values_from = 数值 )
内容的提问来源于stack exchange,提问作者Gregtt
相关产品推荐
相关产品推荐

