Скользящее среднее на основе условий R

Вот краткое описание моих данных: первый столбец - дата за месяцем, второй столбец - двоичная переменная (0 или 1), третий столбец - доходность акций, поэтому точка возврата акций каждого месяца равна 1 или 0. Я хочу рассчитайте среднюю скользящую доходность за 12 месяцев отдельно на основе второго столбца (0 или 1). В 12-месячной подвижной базе будет разное количество нулей и единиц. Должно быть 2 результата (mean_rolling_0 и mean_rolling_1).

1 ответ

Использование rollmean() из пакета зоопарка, и примените это для каждой группы с group_by() в дплыр.

Вот пример. Я предполагаю вашу структуру данных, но она также будет работать для аналогичных структур.

library(tidyverse)
library(zoo)

# sample data
d = tibble(a = 1:100,
       b = sample(c(0,1), 100, replace = T),
       c = a/10 + rnorm(100))

# compute rolling mean 
d2 = d %>%
    group_by(b) %>%
    mutate(roll = rollmean(c, 12, na.pad=TRUE, align="right"))

# plot to see the effect
ggplot(data = d2) + geom_line(aes(x = a, y = c, colour = factor(b))) +
    geom_line(aes(x = a, y = roll, colour = factor(b)), linetype = 'dashed')
Другие вопросы по тегам