我正在R中工作,我需要对数据集的后3个值(由3个不同的列划分)进行滚动平均。列的值之一每次更改时,滚动平均值应重新开始滚动。
以下示例描绘了我的目标:
Material Channel client value mean
---------------------------------------------
1 2 2 5 NA
1 2 2 10 NA
1 2 2 7 7,3
1 2 2 10 9
1 2 5 5 NA
1 2 5 3 NA
1 2 5 5 13
我尝试使用rollmean函数,但是它没有按列对数据集进行分区。
input_mes_cluster[, peso_medio:=rollmean(peso, k = 12) , by= c("cluster","material","canal", "cliente", "regiao")]
如何获得预期的结果?
谢谢!
答案 0 :(得分:0)
library(tidyverse)
library(roll)
data.frame(Material = rep(1,7),
Channel = rep(2,7),
client = c(2,2,2,2,5,5,5),
value = c(5,10,7,10,5,3,5)) %>%
as_tibble() %>%
group_by(Material, Channel, client) %>%
mutate(mean = roll::roll_mean(as.matrix(value), width = 3))