R 特定行的平均值

R average from specific rows

我有一个示例性的 data.frame,其中包含两列,'month' 和 'value'。

我想使用当前和上个月的数据计算每一行的平均值,而不需要各自的观察本身。这意味着 n-1 行的平均值,其中 n 是当前和上个月的行数。

我知道如何计算所有行的 n-1 平均值(请参阅第 'mean_k_1' 列)。

仍然缺少的是 n 的规范,这意味着应该只考虑当前和上个月的行,而不是所有行。

预期结果在 'mean_lag' 列。

这是一个 MWE:

month <- as.Date(c("2020-01-01", "2020-01-01", "2020-02-01", "2020-02-01", "2020-02-01", "2020-03-01",
                   "2020-04-01", "2020-04-01", "2020-04-01", "2020-05-01", "2020-05-01"))
value <- c(102, 110, 98, 76, 320, 419, 215, 50, 99, 46, 129)
mean_lag <- c(110, 102, 152, 157.5, 96.5, 164.7, 189.3, 244.3, 228.0, 123.3, 102.5)
df <- cbind.data.frame(month, value, mean_lag)
n <- nrow(df)

df$mean_k_1 <- (mean(df$value)*n - df$value)/(n-1)

对于 month 的每个值,我们取 mean 当前和上个月的所有值,不包括当前观察值。

library(dplyr)
library(lubridate)

df %>%
  mutate(mean_lag_res = purrr::map_dbl(row_number(), ~{
    val <- month[.x]
    mean(value[-.x][between(month[-.x], val %m-% months(1), val)])
}))

#        month value mean_lag mean_lag_res
#1  2020-01-01   102    110.0        110.0
#2  2020-01-01   110    102.0        102.0
#3  2020-02-01    98    152.0        152.0
#4  2020-02-01    76    157.5        157.5
#5  2020-02-01   320     96.5         96.5
#6  2020-03-01   419    164.7        164.7
#7  2020-04-01   215    189.3        189.3
#8  2020-04-01    50    244.3        244.3
#9  2020-04-01    99    228.0        228.0
#10 2020-05-01    46    123.3        123.2
#11 2020-05-01   129    102.5        102.5