本文介绍了在R中,哪个是右滚动平均值,哪个是左滚动平均值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我要计算前n平均年份,并且滞后于当前年份,我将如何实现这一点?它是不是就像一扇"右"滚动的普通窗户一样简单呢?或者,这是一扇"左"字滚动的中档窗户?我不确定在此使用哪个窗口。

样本数据

set.seed(1234)
dat <- data.frame(year = c(1990:2010), 
                  x = rnorm(21))
dat$x_lag1 <- lag(dat$x, 1)

推荐答案

可能更容易考虑偏移量。如果您希望窗口为3,则

  • align = "right"对应于使用基于-2、-1、0的偏移量的窗口,即前一点、前一点和当前点之前的点。当前点是窗口的最右端。请注意,末尾带有rrollapplyr与指定align = "right"
  • 相同
  • align = "center"对应于使用基于-1、0、1的偏移量的窗口,即前一点、当前点和下一点。当前点是窗口的中心。这是align=的默认设置。
  • align = "left"对应于使用基于0、1、2的偏移量的窗口,即当前点、下一点和之后的点。当前点是窗口最左侧的点。

rollapply允许使用align=规范或偏移量表示法。要将后者用于width,请指定一个包含定义偏移量的单个向量的列表。(宽度的实际指定是为输入的每个元素或偏移向量列表指定一个宽度向量;然而,在这两种情况下,它们都是循环的,因此指定单个标量宽度或包含单个偏移向量的列表的通常情况是特定的情况。)

窗口在当前点结束

下面,我们使用align=取以当前点结束的窗口3的平均值,并使用偏移量作为替代。我们同时显示数据框和Zoo对象。

我们省略了动物园对象的fill=NA,因为它们无论如何都会自动对齐,因此通常不需要使用它。

library(zoo)

r1 <- transform(dat, roll = rollapplyr(x, 3, mean, fill = NA))

r2 <- transform(dat, roll = rollapply(x, list(seq(-2, 0)), mean, fill = NA))

all.equal(r1, r2)
## [1] TRUE

z <- read.zoo(dat, FUN = identity)
r3 <- rollapplyr(z, 3, mean)

r4 <- rollmeanr(z, 3)

r5 <- rollapply(z, list(seq(-2, 0)), mean) # z from above

all.equal(r3, r4, r5)
## [1] TRUE

窗口在前一点结束

如果您想要之前的3个点,即偏移量-3、-2、-1,即不是当前点,而是之前的3个点,则以下方法将起作用。请注意,最后一行中的lag需要时间序列,不应与平面向量一起使用。

# r6 is data frame
r6 <- transform(dat, roll = rollapply(x, list(-seq(3)), mean, fill = NA))

# r7, r8, r9 are zoo objects

r7 <- rollapply(z, list(-seq(3)), mean) # z from above

r8 <- stats::lag(rollapplyr(z, 3, mean), -1)

r9 <- stats::lag(rollmeanr(z, 3), -1)

all.equal(r7, r8, r9)
## [1] TRUE

这篇关于在R中,哪个是右滚动平均值,哪个是左滚动平均值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 09:30