apply a function to a rolling subset of a vector
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