Вы должны сначала tidyr::nest
дела. Внутри вложенного tibbles
(доступ через purrr::map
) вы можете применить slide
(тот же метод, что и для purrr::map
). Важным моментом является то, что вы не хотите slide
для разных случаев, а только для случаев.
library(dplyr)
library(tidyr)
library(purrr)
library(slider)
get_coef1 <- function(data) {
coef1 <- lm(data = data, r1 ~ r2 + r3) %>%
coef() %>%
.["r2"] %>%
unname()
return(coef1)
}
data <- tibble(t = rep(1:10, 3),
case = c(rep("a", 10), rep("b", 10), rep("c", 10)),
r1 = rnorm(30),
r2 = rnorm(30),
r3 = rnorm(30))
data %>%
# ungroup() %>%
group_by(case) %>% nest() %>%
mutate(rollreg = map(data, ~ .x %>% mutate(coef1 = slider::slide_dbl(., ~get_coef1(.x), .before = Inf, .complete = TRUE)))) %>%
select(-data) %>% unnest(rollreg)
Я некоторое время пытался использовать новый dplyr::nest_by()
из dplyr 1.0.0, пытаясь использовать summarise
в сочетании с rowwise
делами, но не смог заставить это работать.