[R] apply a function to a rolling subset of a vector

Duncan Murdoch murdoch at stats.uwo.ca
Wed Mar 2 23:39:31 CET 2005


On Wed, 2 Mar 2005 17:22:43 -0500, "Whit Armstrong"
<whit at twinfieldscapital.com> wrote :

>Does anyone know an easy way to calculate the rolling 20 period average
>or sum of a vector?
>
>For instance:
>x <- rnorm(1000)
>
>y <- apply.subset(x,20,fun="sum")
>
>The first element of y would contain the sum of elements 1 to 20, the
>second element of y 
>would contain the sum of elements 2:21, and so on.
>
>I thought I had seen this on the list a year or so ago, but I couldn't
>find anything in the archives.

I don't know of a general purpose function, but filter() (in the stats
package) can do the example you give, or any other linear filter.

e.g.

x <- rnorm(1000)
y <- filter(x, rep(1,20))

puts 20 element sums into y.  The vector ends up the same length as x,
with NAs at the beginning and end (by default).

Duncan Murdoch




More information about the R-help mailing list