Скользящее среднее на основе условий R - PullRequest
0 голосов
/ 27 сентября 2018

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

1 Ответ

0 голосов
/ 27 сентября 2018

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

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

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')
...