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

如何在R中按shop_code+product_id分组,按月汇总return_count生成透视表

解决方案:生成按月份聚合的透视表

我来帮你搞定这个需求,咱们一步步把数据集处理成你要的透视表格式。核心是先处理日期、按要求分组聚合,再转成宽表并补全所有月份的缺失值。

步骤1:加载所需工具包

首先需要用到dplyr做数据操作,lubridate处理日期,tidyr做宽长格式转换,先加载它们:

library(dplyr)
library(lubridate)
library(tidyr)

步骤2:处理日期并按分组聚合

先把doc_date从因子转成日期格式,提取出月份,然后按shop_code+product_id+月份分组,计算每个组的return_count总和:

mydata_processed <- mydata %>%
  # 转换日期格式,适配原数据的dd.mm.yyyy格式
  mutate(doc_date = dmy(doc_date),
         month = month(doc_date, label = TRUE, abbr = TRUE)) %>% # 提取月份英文缩写
  # 按要求分组求和
  group_by(shop_code, product_id, month) %>%
  summarise(total_returns = sum(return_count), .groups = "drop")

步骤3:补全所有12个月份并转成透视表

原数据可能缺少某些月份,我们需要补全全部12个月份,缺失月份的求和值设为0,再转成你要的透视表宽格式:

# 定义12个月份的标准缩写顺序
all_months <- factor(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                       "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
                     levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                                "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))

pivot_table <- mydata_processed %>%
  # 补全所有月份,缺失的求和值填充为0
  complete(shop_code, product_id, month = all_months, fill = list(total_returns = 0)) %>%
  # 转成宽表:分组作为行,月份作为列
  pivot_wider(names_from = month, values_from = total_returns)

步骤4:输出目标格式

现在你可以查看完整的透视表,或者输出成你示例里的一行数值格式:

# 打印完整透视表
print(pivot_table)

# 输出示例中的纯数值行(去掉分组列,只保留月份对应的求和值)
cat(paste(pivot_table %>% select(-shop_code, -product_id), collapse = " "))

最终运行结果

针对你提供的数据集,运行后会得到和示例匹配的输出:

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
2   3   2   2   3   1   3   0   2   0   0   0 

这里要强调的是,和普通的分组聚合问题不同,我们额外做了补全所有缺失月份和宽格式转换的操作,这正是你需求中透视表格式的核心要求,所以和常规的多变量聚合问题并不重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:03:06