tags:

views:

279

answers:

1

Given I have a zoo dataset, I'd like to perform a sliding operation against it with the result being another zoo dataset.

> x
                      Y
(09/24/09 08:00:13)   3.1
(09/24/09 08:05:13)   4.2
(09/24/09 08:10:13)   4.5
(09/24/09 08:15:13)   9.4
(09/24/09 08:20:13)   9.8
(09/24/09 08:25:13)   7.7
(09/24/09 08:30:13)  13.3
(09/24/09 08:35:13)   6.5
(09/24/09 08:40:13)  14.7
(09/24/09 08:45:13)  23.5
(09/24/09 08:50:13)  20.9
(09/24/09 08:55:13)   8.5

My goal is to produce a "smooth" average by iterating through each time interval and obtaining the mean for the set of Y points that are +/- 15 minutes of the current point.

I have a bucketing method of averaging working, but it reduces the resolution of the data. I haven't worked out how to make relative subsets out of zoo with artibrary math, window should help but accessing the index is being difficult.

Thanks.

+4  A: 

Use rollmean. Here's an example:

x.Date <- as.Date(paste(2004, rep(1:4, 4:1), sample(1:28, 10), sep = "-"))
x <- zoo(rnorm(12), x.Date)
rollmean(x, 3)

In you case, you will want to lag your data after taking the mean since you the mean around a point in time.

Lastly, you should know about the rollapply function in zoo which can do a rolling operation on any function (including one that you define).

Shane
@Shane, you're the man once again. Learning R I'm trying to accomplish a certain task, I haven't been exposed to enough of the library. Thanks!
Demosthenex
I am once again grateful I don't have to write a custom function! Haha!
Demosthenex