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

R/dplyr使用pivot_wider重塑数据框时如何在过程中对数值求和

问题原因

你的测试数据中,sub_category与category的组合存在重复观测:sub_category = 'b'对应的category='A'有2行数据、category='B'也有2行数据,宽转换时同一分组下存在多个数值,才会出现列表列、spread报错的情况。
spread是tidyr的旧版宽转换函数,本身不支持同一键组合下多值的自动处理,遇到重复键就会直接抛出唯一键错误,现在官方更推荐使用功能更灵活的pivot_wider完成宽转换操作。

解决方案

你需要在pivot_wider中调用values_fn参数,直接指定对同一分组下的多个数值执行求和操作,一步就能得到你要的结果:

library(tidyverse)
test_data <- data.frame(
  category=c('A','A','A','B','B','B'),
  sub_category=c('a','b','b','a','b','b'),
  amount=1:6
)

test_data %>% 
  pivot_wider(
    names_from = 'category',
    values_from = 'amount',
    values_fn = sum
  )

运行后输出的结果如下:

sub_categoryAB
a14
b511

如果你的需求不是聚合求和,而是要保留所有原始行的数值,可以先给同一键组合的行添加唯一标识列再做宽转换:

test_data %>% 
  group_by(category, sub_category) %>% 
  mutate(row_id = row_number()) %>% 
  pivot_wider(
    names_from = 'category',
    values_from = 'amount'
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:03