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

R语言按零售商、门店分组计算最近4周金额与去年同期百分比变化

完整实现代码

library(tidyverse)

A_processed <- A %>%
  # 拆分final_week提取年份和独立周标识(后四位为和年份无关的周次标记)
  mutate(
    year = as.integer(substr(final_week, 1, 4)),
    week_id = substr(final_week, 5, 8)
  ) %>%
  # 按零售商、门店分组
  group_by(retailer, store) %>%
  # 分组内按final_week降序排序
  arrange(desc(final_week), .by_group = TRUE) %>%
  # 标记当前分组下最近4周为需要计算同比的目标周
  mutate(is_target_week = row_number() <= 4) %>%
  ungroup() %>%
  # 按门店+周标识分组,匹配同周次的两年数据
  group_by(retailer, store, week_id) %>%
  # 过滤掉不需要计算的非目标周
  filter(any(is_target_week)) %>%
  # 计算同比百分比差异
  summarise(
    current_year = max(year),
    current_dollars = dollars[year == max(year)],
    last_year_dollars = dollars[year == min(year)],
    # 百分比差异:(今年值-去年值)/去年值*100%,正为增长负为下降
    YoY_diff_pct = (current_dollars - last_year_dollars)/last_year_dollars * 100,
    .groups = "drop"
  )

# 若需要把计算结果合并回原表,可通过retailer、store、week_id三个字段做left_join关联

逻辑说明

  • 首先处理final_week字段拆分出年份和周标识,解决同期周匹配的问题
  • 修正了你初始代码中arrange嵌套的错误,用.by_group = TRUE参数实现分组内排序
  • 标记每个门店的最近4周为目标周后,按周标识分组即可直接匹配到两年同期的销售数据,按需计算差值即可
  • 若存在去年同期数据缺失的情况,计算结果会自动返回NA,不需要额外做异常处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:03