首页 > 解决方案 > 最近 3 个月滞后于 r

问题描述

数据是:

Category <- c(rep("A",4))
Month <- c(1,2,3,4)
Sales <- c(10,15,20,25)

df <- data.frame(Category,Month,Sales)

df <- df %>% filter(Category=='A') %>% 
             group_by(Month) %>%
             summarise(Sales=sum(Sales,na.rm=TRUE)) %>%
             mutate(lag_1 = dplyr::lag(Sales, 1),
                    lag_2 = dplyr::lag(Sales, 2),
                    lag_3 = dplyr::lag(Sales, 3),
                    lag_3_mean = rollapply(Sales,3,mean,align='right',fill=NA))

当前输出 在此处输入图像描述

我希望 lag_3_mean 是过去 3 个月的平均值,不包括本月。例如,在第 4 个月,lag_3_mean = 平均值(第 3、2、1 个月的销售额)。

预期的输出应该是:

在此处输入图像描述

标签: r

解决方案


使用宽度list(-(1:3))来获得 -1、-2、-3 的偏移量。

rollapplyr(Sales, list(-(1:3)), mean, fill = NA)

请注意,这个最近的问题非常相似 Variable frameshift rolling average for multiple variables


推荐阅读