意味着2个滞后,所有等级

时间:2016-01-15 14:38:20

标签: r zoo

我的数据框下面有3列。一个因子,一个观察和列,我想计算因子上每个级别的两个先前观察。

第7行的Mean_x取值为5,因为对“a”的最后两次观察是7和3,第4行和第3行。

我看了一下动物园包装。但它似乎只占用了所有行的延迟,现在我想要在每个因子水平内的滞后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

1 个答案:

答案 0 :(得分:2)

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

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