如何在R dataframe中合并重复订单号并转宽格式求和
解决方法
要实现需求,需要先对重复的「订单号+SKU」组合求和,再转换为宽格式,具体步骤如下:
1. 构造测试数据
先还原你的popcorn数据框:
popcorn <- data.frame( 年份 = c(2016, 2016, 2016, 2016), 订单号 = c(4920299, 4920307, 4920307, 4920485), Product_SKU = c("Medium", "Small", "Small", "Large"), 价格 = c(4.5, 3.5, 3.5, 5) )
2. 分组求和+转宽格式
使用dplyr和tidyr包处理,有两种常用方式:
方式一:用spread()(旧版函数)
先按年份、订单号、Product_SKU分组,对价格求和(确保每个组合唯一,避免转宽时冲突),再用spread()转宽格式并填充缺失值为0:
library(dplyr) library(tidyr) # 分组求和 popcorn_sum <- popcorn %>% group_by(年份, 订单号, Product_SKU) %>% summarize(总价 = sum(价格), .groups = "drop") # 转换为宽格式 popcorn_wide <- popcorn_sum %>% spread(key = Product_SKU, value = 总价, fill = 0)
方式二:用pivot_wider()(新版推荐)
pivot_wider()是spread()的替代函数,功能更灵活,可直接在转宽时设置缺失值填充规则:
library(dplyr) library(tidyr) popcorn_wide <- popcorn %>% group_by(年份, 订单号, Product_SKU) %>% summarize(总价 = sum(价格), .groups = "drop") %>% pivot_wider( names_from = Product_SKU, values_from = 总价, values_fill = 0 )
运行后得到的popcorn_wide就是你需要的目标表格。
内容的提问来源于stack exchange,提问作者Yuzuuu
相关产品推荐
相关产品推荐

