R中前三个值的移动平均值

Posted

技术标签:

【中文标题】R中前三个值的移动平均值【英文标题】:Moving average of previous three values in R 【发布时间】:2013-04-18 02:00:06 【问题描述】:

在 zoo 包中有一个叫做 rollmean 的函数,它可以让你制作移动平均线。 rollmean(x,3) 将采用下表中的上一个、当前和下一个值(即 4、6 和 2)。这显示在第二列中。

x   rollmean    ma3
4       
6   4.0 
2   4.3 
5   3.0         4.0
2   6.3         4.3
12  6.0         3.0
4   6.0         6.3
2               6.0

我想完成相同的工作,但通过平均第四行中的前 3 个值。这显示在第三列中。谁能告诉我有助于完成此任务的函数名称?

【问题讨论】:

你可以使用filter(x,rep(1/3,3),sides=1) 【参考方案1】:

您可以使用rollmean,但设置align='right'。或者您可以使用rollmeanr,它的默认值为align='right'

ma3 <- rollmeanr(x[,1],3,fill=NA)

...但是您仍然需要滞后结果。另一种解决方案是将rollapplywidth 参数的列表一起使用:

ma3 <- rollapplyr(x[,1],list(-(3:1)),mean,fill=NA)

【讨论】:

【参考方案2】:

我努力寻找一个简单的移动平均线函数,它可以灵活地完成我需要的操作。我终于写了几个函数,基于 rinni 在上面的评论中给出的 filter 函数扩展了一个函数(但它本身不起作用,因为它将包括 3 个周期平均值中的当前观察值)。

    包含当前观测值的移动平均函数

    mav <- function(x,n)filter(x,rep(1/n,n), sides=1) 
    

    不包括当前观察的移动平均函数

    mavback <- function(x,n)
      a<-mav(x,1)
      b<-mav(x,(n+1))
      c<-(1/n)*((n+1)*b - a)
      return(c)
    
    

    后向移动平均函数,不包括当前 obs,基于从 [h1] 周期开始的 [h2] 读数

    mavback1<-function(x,h1,h2)
      a<-mavback(x,h1)
      b<-mavback(x,h1-h2)
      c<-(1/h2)*(h1*a -(h1-h2)*b)
      return(c)
    
    

【讨论】:

【参考方案3】:

w_i_l_l的mavback函数基于他的mav函数更简单的实现

mavback &lt;- function(x,n) filter(x, c(0, rep(1/n,n)), sides=1)

【讨论】:

如果您使用的是 dplyr,请确保调用 filter 显式 stats::filter

以上是关于R中前三个值的移动平均值的主要内容,如果未能解决你的问题,请参考以下文章

每组 7 天移动平均线 - R

计算移动平均线

Pandas 计算组中前 n 条记录的平均值

在矩阵上使用带有均值函数的 mapply

R - 如何制作 n 个先前值的平均值/平均值,不包括当前观察值(滚动平均值)

计算R中列中NA的前后值的平均值