14

在 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 个值。这显示在第三列中。谁能告诉我有助于完成此任务的函数名称?

4

3 回答 3

19

你可以使用rollmean,但是设置align='right'。或者您可以使用rollmeanr默认align='right'设置。

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

...但你仍然需要滞后结果。另一种解决方案是使用参数rollapply列表width

ma3 <- rollapplyr(x[,1],list(-(3:1)),mean,fill=NA)
于 2013-04-24T13:33:05.183 回答
10

我努力寻找一个简单的移动平均线函数,它可以灵活地做我需要的事情。我终于写了几个函数,基于 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. 回溯移动平均函数,不包括当前 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)
    }
    
于 2016-08-24T02:25:20.143 回答
1

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

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

于 2018-01-18T13:15:49.990 回答