Moving average of previous three values in R

Jochem picture Jochem · Apr 24, 2013 · Viewed 31.6k times · Source

In the zoo package there is a function called rollmean, which enables you to make moving averages. The rollmean(x,3) will take the previous, current and next value (ie 4, 6 and 2) in the table below. This is shown in the second column.

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

I would like to get the same job done, but by averaging out the previous 3 values in the fourth row. This is displayed in the third column. Can anybody tell me the name of the function that will help to accomplish this?

Answer

Joshua Ulrich picture Joshua Ulrich · Apr 24, 2013

You can use rollmean, but set align='right'. Or you could use rollmeanr, which has align='right' as the default.

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

...but you would still need to lag the result. Another solution is to use rollapply with a list for the width argument:

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