如果我想计算以前n
平均年本年度的滞后,我将如何做到这一点?它是简单的“正确”的滚动平均值窗口?抑或是“左”滚动平均值窗口?我不知道在这里使用的窗口。
样本数据
set.seed(1234)
dat <- data.frame(year = c(1990:2010),
x = rnorm(21))
dat$x_lag1 <- lag(dat$x, 1)
它可能会更容易觉得补偿的条款。如果你想为3的窗口,然后
align = "right"
对应于使用基于0的偏移-2,-1,一个窗口,即点之前之前,前一和当前点。目前的点是窗口的最右端。注意与对端的rollapplyr
即r
相同指定align = "right"
align = "center"
对应于使用基于-1,0,1的偏移的窗口,即在先点当前点和下一个点。目前的点是窗口的中心。align = "left"
对应于使用基于0,1,2,即当前点,下一个后点和点的偏移量的窗口。目前的点是窗口的最左边的点。rollapply
允许人们使用align=
说明书或偏移量符号。要使用后者用于width
指定包含限定所述偏移量的单个矢量的列表。
下面我们用align=
采取3在目前点位结束了窗口的平均值,还可以使用偏移作为替代。我们同时显示的数据帧和动物园的对象。
我们省略fill=NA
为动物园对象,因为,因此通常没必要使用它会自动对齐反正。
library(zoo)
transform(dat, roll = rollapplyr(x, 3, mean, fill = NA))
transform(dat, roll = rollapply(x, list(seq(-2, 0)), mean, fill = NA))
z <- read.zoo(dat, FUN = identity)
rollapplyr(z, 3, mean)
rollmeanr(z, 3)
rollapply(z, list(seq(-2, 0)), mean) # z from above
如果你想在3点之前,即偏移-3,-2,-1,即不是当前的点,但在此之前,3分,那么下面会工作。请注意,在最后一行lag
需要一个时间序列,不应该与普通的载体中使用。
transform(dat, roll = rollapply(x, list(-seq(3)), mean, fill = NA))
rollapply(z, list(-seq(3)), mean) # z from above
lag(rollapplyr(z, 3, mean), -1)
lag(rollmeanr(z, 3), -1)
总之使用align = "right"
就是答案。所述align
指定是否结果的索引相比滚动观测窗被left/center/right
对准。如果width=3, align="right"
然后从左边的两个观测值一起传递电流下观察当前观察指标FUN
计算值。
人们可以使用滚动(lag
)的align = "right"
意味着为上一mean
观察排除当前观察n
。下面的答案基于zoo::rollapply
并计算mean
了以前5
年。
set.seed(1)
dat <- data.frame(year = c(1990:2010),
x = rnorm(21))
library(dplyr)
library(zoo)
#Mean for previous 5 years can be calculated as:
dat$meanx <- lag(rollapply(dat$x, 5, mean, align = "right", fill=NA))
#Test result
dat[1:10,]
# year x meanx
# 1 1990 -0.6264538 NA
# 2 1991 0.1836433 NA
# 3 1992 -0.8356286 NA
# 4 1993 1.5952808 NA
# 5 1994 0.3295078 NA
# 6 1995 -0.8204684 0.12926990
# 7 1996 0.4874291 0.09046698
# 8 1997 0.7383247 0.15122413
# 9 1998 0.5757814 0.46601479
# 10 1999 -0.3053884 0.26211490
# so on