[R] Computing Rolling Average

William Dunlap wdunlap at tibco.com
Tue Nov 16 21:14:58 CET 2010


Have you tried filter()?
   filter(a, rep(1,7)/7)

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Ray Brownrigg
> Sent: Tuesday, November 16, 2010 12:05 PM
> To: r-help at r-project.org
> Subject: Re: [R] Computing Rolling Average
> 
> On Wed, 17 Nov 2010, Paolo Rossi wrote:
> > Hi,
> > Can anyone suggest a  clever way to compute a rolling 
> weekly average of the
> > columns in a matrix?  The column bit is straightforward - 
> use apply given a
> > function which does what you want on a column. With regard 
> to a particular
> > column, the obvious way is to run a for loop indexing the 
> last 7 days and
> > computing the average . I simply would like to know if 
> there is a  better /
> > quicker way.
> >
> >
> >
> > Code:
> > Given a,
> >
> > > a= array(1:100, dim = c(17,2))
> > > a
> >
> >       [,1] [,2]
> >  [1,]    1   18
> >  [2,]    2   19
> >  [3,]    3   20
> >  [4,]    4   21
> >  [5,]    5   22
> >  [6,]    6   23
> >  [7,]    7   24
> >  [8,]    8   25
> >  [9,]    9   26
> > [10,]   10   27
> > [11,]   11   28
> > [12,]   12   29
> > [13,]   13   30
> > [14,]   14   31
> > [15,]   15   32
> > [16,]   16   33
> > [17,]   17   34
> > one needs to start computing the average from obs 7 s (at 
> obs 7 you have a
> > full week to compute the average) and compute the rolling 
> weekly average
> > from day 7 onwards
> > Results will look like b
> >       [,1] [,2]
> >  [1,]    4   14
> >  [2,]    5   21
> >  [3,]    6   22
> >  [4,]    7   23
> >  [5,]    8   24
> >  [6,]    9   25
> >  [7,]   10   26
> >  [8,]   11   27
> >  [9,]   12   28
> > [10,]   13   29
> > Thanks in advance,
> >
> I don't see how an average of 7 numbers all 18 or greater can 
> be 14, as in your
> result[1, 2], unless you have mis-stated the question.
> 
> Anyway, try:
> apply(a, 2, function(x) {cx <- cumsum(x); N <- length(x); 
> (cx[7:N] - c(0, cx[1:(N-7)]))/7}
> 
> HTH
> Ray Brownrigg
> 
> > Paolo
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 



More information about the R-help mailing list