【问题标题】:Moving average with changing period in RR中变化周期的移动平均线
【发布时间】:2014-07-08 09:48:19
【问题描述】:

我有一个名为 abc 的数据框,我正在使用 rollapply 对其进行移动平均。以下代码有效:

forecast <- rollapply(abc, width=12, FUN=mean, align = "right", fill=NA)

现在,我想做同样的事情,宽度是可变的,即第一个月,它会是空的,第二个月,第一个月的价值就会到来。第三个月为(第一个月+第二个月/2),即第i个月,如果i<=12,则值为(sum(1:i-1)/(i-1))i>=12为上个月的平均值forecast 完成的 12 个月。请帮忙。

【问题讨论】:

    标签: r mean moving-average rollapply


    【解决方案1】:

    这里有一些方法:

    1) 部分=TRUE

    n <- length(x)
    c(NA, rollapplyr(x, 12, mean, partial = TRUE)[-n])
    

    注意rollapplyr末尾的r。

    2) 列表宽度 rollapplywidth 参数可以是一个列表,这样第 i 个列表元素是用于第 i 个滚动计算的偏移量的向量。如果我们指定 partial=TRUE,那么超出向量末尾的偏移量将被忽略。如果我们只指定列表中的一个元素,它将被回收:

    rollapply(x, list(-seq(12)), mean, partial = TRUE, fill = NA)
    

    2a) 我们可以写出来,而不是回收并依赖于partial。这里我们需要width &lt;- list(numeric(0), -1, -(1:2), -(1:3), ..., -(1:12), ..., -(1:12)),可以这样计算:

    width <- lapply(seq_along(x), function(x) -seq_len(min(12, x-1)))
    rollapply(x, width, mean)
    

    如果您想稍微修改规范,这将主要是有趣的,因为它非常灵活。

    注意:后来在 cmets 中,发帖人要求使用相同的滚动平均值,但不能滞后。那只是:

    rollapplyr(x, 12, mean, partial = TRUE)
    

    注意rollapplyr末尾的r。

    更新一些改进和其他解决方案。

    【讨论】:

    • @g-grothendieck 谢谢。但是在这里,width 所做的是获取所有先前的值。说:width[10][1] -1 -2 -3 -4 -5 -6 -7 -8 -9这很好。但是,width[15][1] -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 这不是我想要的。我想要你在 [12] 之前所做的,但是在 12 之后,它不会采用所有以前的值,而只会采用最后 12 个值。即从第 13 个元素开始,宽度恒定为 12。所以,width[15] 将是:-3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 请看。
    • 已修改为最多采用 12 个值。
    • @g-grothendieck 再次感谢,它符合我的目的,但我无法弄清楚一件小事。如果我想改变结果,我必须做出什么改变?我的意思是我希望width[1] 是-1 而不是integer(0)width[2]-1 -2 等等。比如说,在第 25 行,我想要 sum(x[14]:x[25])/12 而不是 sum(x[13]:x[24])/12。谢谢。
    • 删除 -1 或只删除 rollapplyr(x, 12, mean, partial = TRUE)。另请注意刚刚添加的更简单的解决方案。
    • 得到不同的结果。使用 width 而不使用 -1:[1] 0.08830709 0.08916036 0.09122831 0.09407099 0.09144008 0.09331063 0.09433104 [8] 0.09823444 0.09457298 0.08625747 0.08442378 0.08149499 0.07916721 0.07667792 使用 rollapply(..,partial = TRUE)[1] 0.08055410 0.08334492 0.08765026 0.08788178 0.08664798 0.08830709 0.08916036 0.09122831 0.09407099 0.09144008 0.09331063 0.09433104 0.09823444 0.09457298 0.08625747 0.08442378 0.08149499 [18] 0.07916721 0.07667792 0.07836255 0.07783986 0.08256117 0.08351636 0.08145590 0.06648748 0.06774488 即使没有。的数据点不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2018-02-08
    • 2016-05-16
    • 2023-03-12
    相关资源
    最近更新 更多