Скользящее среднее на основе условий 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')