Мне нужно заменить NA средними значениями предыдущих трех значений по группам.После замены NA он будет служить входом для вычисления среднего значения, соответствующего следующему NA (если следующий NA будет в течение следующих трех месяцев).
Вот пример:
id date value
1 2017-04-01 40
1 2017-05-01 40
1 2017-06-01 10
1 2017-07-01 NA
1 2017-08-01 NA
2 2014-01-01 27
2 2014-02-01 13
Данные:
dt <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 2L, 2L), date = structure(c(17257, 17287, 17318, 17348, 17379, 16071, 16102), class = "Date"), value = c(40, 40, 10, NA, NA, 27, 13)), row.names = c(1L, 2L, 3L, 4L, 5L, 8L, 9L), class = "data.frame")
Результат должен выглядеть следующим образом:
id date value
1 2017-04-01 40.00
1 2017-05-01 40.00
1 2017-06-01 10.00
1 2017-07-01 30.00
1 2017-08-01 26.66
2 2014-01-01 27.00
2 2014-02-01 13.00
, где 26,66 = (30 + 10 + 40) / 3
Какой эффективный способ сделать это (то есть избежать циклов)?