在动物园包中有一个名为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
我希望完成相同的工作,但是通过平均第四行中的前三个值。这显示在第三列中。谁能告诉我有助于实现这一目标的功能名称?
答案 0 :(得分:17)
您可以使用rollmean
,但请设置align='right'
。或者您可以使用rollmeanr
作为默认值。{/ p>
align='right'
...但你仍然需要滞后结果。另一种解决方案是使用ma3 <- rollmeanr(x[,1],3,fill=NA)
和rollapply
参数列表:
width
答案 1 :(得分:3)
我努力寻找一个简单的移动平均函数,它具有一定的灵活性来完成我需要的工作。我最后写了几个函数,基于rinni在评论中给出的过滤函数来扩展一个函数(但是它本身不起作用,因为它将包括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)
}
根据开始[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) }