R语言如何将门店日销长表按阶段计算中位数后转为宽表
R语言实现门店分阶段销量中位数统计
实现思路
- 给原始数据的日期序号匹配对应的10个统计阶段
- 按门店+阶段分组计算对应区间的销量中位数
- 将长表转换为要求的宽表结构,无数据的阶段自动填充NA
代码实现(基于tidyverse)
首先加载依赖包:
library(tidyverse)
核心处理逻辑:
result <- 你的原始数据表名 %>% # 可选:过滤超出统计周期的异常数据 filter(Day >= 1 & Day <= 100) %>% # 新增阶段列,10天为1个阶段,标签对应要求的字段名 mutate(period = cut(Day, breaks = seq(0, 100, 10), labels = paste0("m_p", 1:10))) %>% # 按门店和阶段分组计算中位数 group_by(Store, period) %>% summarise(median_val = median(Count, na.rm = TRUE), .groups = "drop") %>% # 转换为宽表,缺失阶段自动填充NA pivot_wider(names_from = period, values_from = median_val)
说明
cut函数默认左开右闭的区间逻辑,刚好将1-10天划入第一阶段、11-20天划入第二阶段,以此类推完全匹配需求的阶段划分规则na.rm = TRUE参数用于处理阶段内存在单日销量缺失的情况,不需要可直接删除该参数- 最终输出的
result完全符合要求的宽表结构,无对应阶段数据的字段会自动填充为NA
内容的提问来源于stack exchange,提问作者Nibbles
相关产品推荐
相关产品推荐

