[R] Computing Rolling Average
Ray Brownrigg
Ray.Brownrigg at ecs.vuw.ac.nz
Tue Nov 16 21:05:19 CET 2010
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
More information about the R-help
mailing list