我熟悉 R 中的
lag()
函数,但这次我的独特用例是我想使用 rollapplyr()
执行滚动平均值,不包括前七行数据。
如果我以某种方式调整似乎无法完成工作的代码,这可能吗?
library(tidyverse)
library(zoo)
stack <- data.frame(
date = seq(Sys.Date(), Sys.Date() - 99, -1),
var1 = round(rnorm(100, 8000, 500))
)
lag <- stack %>%
mutate(var1_lag = lag(rollapplyr(var1, 28, mean, partial = TRUE) - 28))
在
rollapply
中,width=
可以是一个包含偏移量向量的列表,其中偏移量 0 是当前位置,偏移量 -1 是之前的位置,依此类推。
下面我们假设需要取以 -7 为结束点的 21 个偏移处的值的平均值。 这不包括偏移量 -6、-5、-4、-3、-2、-1 和 0(当前行和前 6 行,总共 7 个排除行)。 如果有不同的意图,请修改
offsets
。
offsets <- list(seq(to = -7, length = 21))
stack %>%
mutate(var1_lag = rollapplyr(var1, offsets, mean, partial = TRUE, fill = NA))
您可能可以定义
FUN = \(x) mean(head(x, -7))
来排除 7
紧邻的先例值,例如,
stack %>%
mutate(var1_lag = lag(rollapplyr(var1, 28, \(x) mean(head(x, -7)), partial = TRUE) - 28))