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

时间:2013-04-24 13:29:38

标签: r zoo moving-average

在动物园包中有一个名为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 个答案:

答案 0 :(得分:17)

您可以使用rollmean,但请设置align='right'。或者您可以使用rollmeanr作为默认值。{/ p>

align='right'

...但你仍然需要滞后结果。另一种解决方案是使用ma3 <- rollmeanr(x[,1],3,fill=NA) rollapply参数列表:

width

答案 1 :(得分:3)

我努力寻找一个简单的移动平均函数,它具有一定的灵活性来完成我需要的工作。我最后写了几个函数,基于rinni在评论中给出的过滤函数来扩展一个函数(但是它本身不起作用,因为它将包括3个周期平均值中的当前观察值)。

  1. 包含当前观察的移动平均函数

    mav <- function(x,n){filter(x,rep(1/n,n), sides=1)} 
    
  2. 不包括当前观察的移动平均函数

    mavback <- function(x,n){
      a<-mav(x,1)
      b<-mav(x,(n+1))
      c<-(1/n)*((n+1)*b - a)
      return(c)
    }
    
  3. 根据开始[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)
    }
    

答案 2 :(得分:0)

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

mavback <- function(x,n){ filter(x, c(0, rep(1/n,n)), sides=1) }