gpt4 book ai didi

r - 哪个是 'right' 与 R 中的 'left' 滚动平均值?

转载 作者:行者123 更新时间:2023-12-02 08:07:37 24 4
gpt4 key购买 nike

如果我想计算之前的 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 偏移量的窗口,即之前的点、之前的点和当前点。当前点是窗口的最右端。请注意 rollapplyrr最后与指定 align = "right" 相同
  • align = "center"对应于使用基于 -1、0、1 偏移量的窗口,即前一个点当前点和下一个点。当前点是窗口的中心。这是 align= 的默认值.
  • align = "left"对应于使用基于 0、1、2 偏移量的窗口,即当前点、下一个点和之后的点。当前点是窗口的最左边点。
  • rollapply允许使用 align=规范或偏移符号。将后者用于 width指定一个包含定义偏移量的单个向量的列表。 (宽度的实际规范是指定一个宽度向量,一个用于输入的每个元素或一个偏移向量列表;然而,在这两种情况下,它们都循环使用,因此通常情况下指定单个标量宽度或包含一个列表的列表单个偏移向量是特殊情况。)
    窗口结束于当前点
    下面我们使用 align=取以当前点结束的 3 个窗口的平均值,并使用偏移量作为替代。我们同时显示数据框和动物园对象。
    我们省略了 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 - 哪个是 'right' 与 R 中的 'left' 滚动平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111935/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com