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

基于唯一键对指定列求和(sum_distinct):R语言数据汇总问题

解决订单-配料交叉表的产品售出统计错误问题

问题核心是同一个订单的同一款产品会对应多行配料记录,直接按日期+产品分组统计会重复计数,导致结果偏差(比如周一咖啡实际售出3单,却统计成2单)。

正确实现步骤

  1. 先提取每个订单的唯一产品记录(去重订单ID+产品的组合),避免同一订单的多行配料被重复统计
  2. 再按日期+产品分组,统计售出数量

具体dplyr代码示例

假设你的数据包含order_id(订单ID)、date(日期)、product(产品)字段:

library(dplyr)

# 第一步:去重,保留每个订单对应的唯一产品记录
unique_order_products <- cross_ingredient_product %>%
  distinct(order_id, date, product)

# 第二步:分组统计售出数量
sales_summary <- unique_order_products %>%
  group_by(date, product) %>%
  summarise(total_sold = n(), .groups = "drop")

如果数据里有quantity字段(比如每个订单购买的产品数量),调整为:

sales_summary <- cross_ingredient_product %>%
  distinct(order_id, date, product, quantity, .keep_all = FALSE) %>%
  group_by(date, product) %>%
  summarise(total_sold = sum(quantity), .groups = "drop")

为什么sum(distinct(...))不行?

distinct()是用来筛选去重后的行,它不能直接作为sum()的参数——顺序完全搞反了。必须先对行去重,再对去重后的结果做求和/计数操作,而不是在求和函数里嵌套去重。

额外:配料消耗统计

如果需要同时汇总配料消耗(比如每种配料的总用量),可以单独处理:

ingredient_summary <- cross_ingredient_product %>%
  group_by(date, ingredient) %>%
  summarise(total_used = sum(ingredient_quantity), .groups = "drop")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:55:13