Вероятно, есть специальные функции, но, похоже, это работает.Это дает вам некоторый контроль над тем, как вы хотите, чтобы он вел себя.Например, функция default = 0
в опережении позволяет перейти к последней записи, даже если нет опережающих значений.Держу пари, что это относительно медленно и неэффективно.
library(dplyr)
library(purrr)
rolling_sum <- function(v, window = 1) {
k <- 1:window
vLag <- k %>%
map_dfc(~lag(v, .))
vLead <- k %>%
map_dfc(~lead(v, ., default = 0))
rowSums(bind_cols(vLag, V = v, vLead))
}
df <- data.frame(n = c(1,3,4,5,6,7,9,1,5))
df %>%
mutate(window1 = rolling_sum(n, 1),
window2 = rolling_sum(n, 2))