Hello, everyone I wonder if there is in R somewhere a function similar to cumsum(). The function calculates a statistic (say mean or standard deviation) buy adding consequtively one more data point. So, say I have a timeseries of 100 observations. I start by calculating mean of first 30 observations Then I add one observation and calculate mean of 31 observations Then I add one more observation and calculate mean of 32 observation, and so on until the end Is there a function like that in R? Best, Sergey -- Kniven sk?rpes bara mot stenen.
Try this; set.seed(123) x <- rnorm(100) sapply(30:length(x), function(i)mean(x[1:i])) On Tue, Sep 22, 2009 at 11:12 AM, Sergey Goriatchev <sergeyg at gmail.com> wrote:> Hello, everyone > > I wonder if there is in R somewhere a function similar to cumsum(). > The function calculates a statistic (say mean or standard deviation) > buy adding consequtively one more data point. > > So, say I have a timeseries of 100 observations. > I start by calculating mean of first 30 observations > Then I add one observation and calculate mean of 31 observations > Then I add one more observation and calculate mean of 32 observation, > and so on until the end > > Is there a function like that in R? > > Best, > Sergey > > -- > Kniven sk?rpes bara mot stenen. > > ______________________________________________ > 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. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O
For the case of the mean, you can use the following: cummean <- function (x) cumsum(x) / seq_len(length(x)) for more a general function, one option is cumFUN <- function (x, FUN = mean) { sapply(seq_len(length(x)), function (i) FUN(x[1:i])) } # Examples: x <- rnorm(100) cummean(x) cumFUN(x) cumFUN(x, sd) I hope it helps. Best, Dimitris Sergey Goriatchev wrote:> Hello, everyone > > I wonder if there is in R somewhere a function similar to cumsum(). > The function calculates a statistic (say mean or standard deviation) > buy adding consequtively one more data point. > > So, say I have a timeseries of 100 observations. > I start by calculating mean of first 30 observations > Then I add one observation and calculate mean of 31 observations > Then I add one more observation and calculate mean of 32 observation, > and so on until the end > > Is there a function like that in R? > > Best, > Sergey >-- Dimitris Rizopoulos Assistant Professor Department of Biostatistics Erasmus University Medical Center Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands Tel: +31/(0)10/7043478 Fax: +31/(0)10/7043014
Sergey Goriatchev <sergeyg <at> gmail.com> writes:> > Hello, everyone > > I wonder if there is in R somewhere a function similar to cumsum(). > The function calculates a statistic (say mean or standard deviation) > buy adding consequtively one more data point. > > So, say I have a timeseries of 100 observations. > I start by calculating mean of first 30 observations > Then I add one observation and calculate mean of 31 observations > Then I add one more observation and calculate mean of 32 observation, > and so on until the end > > Is there a function like that in R? > > Best, > Sergey >There was some recent discussion of using Reduce(...,accumulate=TRUE) but I think this won't work in your case. For your particular case I think cumsum(z)/seq_along(z) gives the running mean you want (starting from the first obs., not the 30th, but you can always drop the first 30). sd() is a little harder. You might be able to use the (numerically inaccurate) E[z^2]-E[z]^2 trick with cumsum ...