这是“正确”与“左” R中滚动平均值?

问题描述 投票:2回答:2

如果我想计算以前n平均年本年度的滞后,我将如何做到这一点?它是简单的“正确”的滚动平均值窗口?抑或是“左”滚动平均值窗口?我不知道在这里使用的窗口。

样本数据

set.seed(1234)
dat <- data.frame(year = c(1990:2010), 
                  x = rnorm(21))
dat$x_lag1 <- lag(dat$x, 1)
r mean moving-average rolling-computation
2个回答
4
投票

它可能会更容易觉得补偿的条款。如果你想为3的窗口,然后

  • align = "right"对应于使用基于0的偏移-2,-1,一个窗口,即点之前之前,前一和当前点。目前的点是窗口的最右端。注意与对端的rollapplyrr相同指定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)

2
投票

总之使用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
© www.soinside.com 2019 - 2024. All rights reserved.