均值 2 个滞后,所有级别

mean for 2 lags, all levels

我的数据框下面有 3 列。一个因子,一个观察值和列,我想在其中计算每个因子水平的两个先前观察值。

Mean_x 第 7 行的值为 5,因为 "a" 上的最后两个观察值是 7 和 3,第 4 行和第 3 行。

我看过一些 zoo 包。但它似乎只需要所有行的滞后,现在我想要在每个因素级别内的滞后 2 的平均值..

factorobservation   mean_x
1   d   8   NA
2   b   11  NA
3   a   3   NA
4   a   7   NA
5   c   1   NA
6   b   7   NA
7   a   2   NA
8   a   4   NA
9   d   9   NA
10  c   8   NA
11  d   7   NA
12  c   5   NA
13  c   6   NA
14  d   9   NA
15  a   5   NA
16  a   3   NA
17  d   7   NA
18  a   3   NA
19  d   4   NA
20  c   4   NA

我认为你必须创建一个在你的因子的每个级别内运行的函数,如下所示:

f <- function(x) {
  if (length(x) < 3) {
    rep(NA, length(x))
  } else {
    c(NA, NA, sapply(3:length(x), function(i) mean(x[i-1:2])))
  }
}

然后,按照其他人的建议,您可以使用 ave 将结果广播回原来的 data.frame:

df$mean_x <- ave(df$observation, df$factor, FUN=f)

> df
   factor observation mean_x
1       d           8     NA
2       b          11     NA
3       a           3     NA
4       a           7     NA
5       c           1     NA
6       b           7     NA
7       a           2    5.0
8       a           4    4.5
9       d           9     NA
10      c           8     NA
11      d           7    8.5
12      c           5    4.5
13      c           6    6.5
14      d           9    8.0
15      a           5    3.0
16      a           3    4.5
17      d           7    8.0
18      a           3    4.0
19      d           4    8.0
20      c           4    5.5