我的数据框下面有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
答案 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