如何构造一个条件前3周的条件运行平均数?

问题描述 投票:0回答:1

我有以下样本df,由一个类别(),其中不同的 物品 显示(披萨或意大利面)以及它们的种类。销售 不同日历周的数据(CW). 在某些星期,有一个 晋升,从而导致销量上升。6个最大的销售值被标记为这样的促销活动。

# example df
set.seed(99999)

df <- data.frame(Cat = rep(c("A","B"),52),
                 Article = rep(c("Pizza","Pasta"),52))
df <- df[order(df$Cat),]
df$CW <- rep(1:52,2)
df$sales <- abs(2+rnorm(104))
df$promotion <- ifelse(rank(df$sales,ties.method=c("last"))>98,1,0)

现在的挑战是 计算出晋升的 "基线"。. 基线需要满足以下要求。

  • 每条、每类,推广前三周需计算为基线。
  • 基线应该是 "运行 "的,即每个日历周都应该有一个基线。
  • 在前三周的基线建设中,必须没有晋升。如果有,则忽略该周,取之前较多的一周,直到找到没有晋升的一周,并达到三周。如果应该无法做到,如CW 1-3,则取下一个未来的基线值。

我曾尝试用现有的 在stackoverflow上发表文章 ,但没有成功。因此,我请求帮助。

r moving-average promotions
1个回答
1
投票

一个解决方案与 dplyr动物园 可能是这样的。

library(dplyr)
library(zoo)

df2 <- df %>%
  arrange(Cat,Article,CW) %>%
  group_by(Cat,Article,stimulus) %>%
  mutate(Baseline=rollapplyr(sales,list(-(3:1)),mean,fill=NA))%>%
  ungroup()%>%
  mutate(Baseline=ifelse(stimulus==1,lead(Baseline,n=1L),Baseline))
© www.soinside.com 2019 - 2024. All rights reserved.