On Feb 17, 2014, at 10:45 AM, C W wrote: > Hi list, > How do I calculate a moving average without using filter(). filter() does > not seem to give weighted averages. > > I am looking into apply(), tapply,... But nothing "moves". > > For example, > > dat<-c(1:20) > mean(dat[1:3]) > mean(dat[4:6]) > mean(dat[7:9]) > mean(dat[10:12]) > > etc... > > I understand the point of apply is to avoid loops, how should I incorporate > this idea into using an apply()? >
Construct a vector for grouping and use tapply. Modulo division is a common method for achieving this. Sometimes the seq-function can be used if you adjust the length properly. > tapply(dat, (0:(length(dat)-1))%/%3, mean) 0 1 2 3 4 5 6 2.0 5.0 8.0 11.0 14.0 17.0 19.5 tapply(dat, round(seq(1, (length(dat)/3), len=length(dat))), mean) 1 2 3 4 5 6 7 1.5 4.5 8.0 11.0 14.5 18.0 20.0 The comment about weighting dos not seem to be exemplified in your example. > Thanks, > Mike > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@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. David Winsemius Alameda, CA, USA ______________________________________________ R-help@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.