获取 'x' 天 prior/after 特定日期的平均值

Get average of 'x' days prior/after specific dates

在下面的示例中,如何获取 dates.

中列出的日期前 3 天的平均值 data
set.seed(250)
data <- data.frame(Date = seq(as.Date("2020/1/1"), as.Date("2020/1/25"), "day"), Value = rnorm(25))
dates <- c("2020-01-24", "2020-01-13", "2020-01-05")
dates$expected <- c(0.8039, -0.1550, 0.0006)

谢谢!

这是您要找的吗?

data$means <- c(rep_len(NA, 2), rowMeans(embed(data$Value, 3)))

产生

       Date       Value       means
1  2020-01-01  1.27200548          NA
2  2020-01-02 -1.12854285          NA
3  2020-01-03  1.50075972  0.54807411
4  2020-01-04  0.54235338  0.30485675
5  2020-01-05 -0.86076637  0.39411558
6  2020-01-06  0.14604265 -0.05745678
7  2020-01-07 -1.26594728 -0.66022367
8  2020-01-08  0.75936562 -0.12017967
9  2020-01-09  0.37525882 -0.04377428
10 2020-01-10 -0.17140506  0.32107313
11 2020-01-11 -0.07772297  0.04204360
12 2020-01-12 -0.65247375 -0.30053393
13 2020-01-13 -0.35725157 -0.36248277
14 2020-01-14  0.13947094 -0.29008479
15 2020-01-15 -2.08799946 -0.76859336
16 2020-01-16 -1.26800576 -1.07217809
17 2020-01-17  2.42589479 -0.31003681
18 2020-01-18  0.74278927  0.63355943
19 2020-01-19  2.57310796  1.91393067
20 2020-01-20  0.03318109  1.11635944
21 2020-01-21 -0.29903505  0.76908467
22 2020-01-22  0.08292441 -0.06097652
23 2020-01-23 -0.80788614 -0.34133226
24 2020-01-24  0.40801046 -0.10565042
25 2020-01-25  1.28472209  0.29494880

因此对于第 4 行,前 3 个日期的平均值在第 3 行的均值列中

假设如下所示的日期定义 mean3 给定索引 ix 获取 3 个先验值的平均值,如果没有 3 个先验值则获取 NA 并将其应用于日期匹配的索引。

dates <- c("2020-01-24", "2020-01-13", "2020-01-05")

mean3 <- function(ix) if (ix > 3) mean(data$Value[ix - 1:3]) else NA
sapply(match(dates, format(data$Date)), mean3)