【发布时间】:2018-11-22 15:56:13
【问题描述】:
我需要按组将 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
什么是执行此操作的有效方法(即避免 for 循环)?
【问题讨论】: