Christofer Bogaso
2017-Aug-10 18:28 UTC
[R] Zoo rolling window with increasing window size
Hi again, I am wondering there is any function for 'zoo' time series, where I can apply a user defined function rolling window basis, wherein window size is ever increasing i.e. not fixed. For example, let say I have below user defined function and a zoo time series :> library(zoo)> UDF = function(x) sum(x)> TS = zoo(rnorm(10), seq(as.Date('2017-01-01'), as.Date('2017-01-10'), by = '1 day'))>Now I want to apply UDF (this can be any custom function, however here I put it just quick example) rolling window basis like : 1st data point = 1st data point of TS 2nd data point = sum of 1st and 2nd data points of TS 3rd data point = sum of 1st 2nd and 3rd data points of TS so on I am aware of the rollapply() function from zoo, however, appears like it is only for fixed window size. Appreciate any pointer how to achieve above strategy of implementing rolling calculation based on increased window size. Thanks for your time.
Use a `width` of integer index locations. And you likely want "right" (or rollapplyr(), as I used). R> set.seed(21) R> x <- rnorm(10) R> rs <- rollapplyr(x, seq_along(x), sum) R> cs <- cumsum(x) R> identical(rs, cs) [1] TRUE On Thu, Aug 10, 2017 at 1:28 PM, Christofer Bogaso <bogaso.christofer at gmail.com> wrote:> Hi again, > > I am wondering there is any function for 'zoo' time series, where I > can apply a user defined function rolling window basis, wherein window > size is ever increasing i.e. not fixed. For example, let say I have > below user defined function and a zoo time series : > >> library(zoo) > >> UDF = function(x) sum(x) > >> TS = zoo(rnorm(10), seq(as.Date('2017-01-01'), as.Date('2017-01-10'), by = '1 day')) > >> > > Now I want to apply UDF (this can be any custom function, however here > I put it just quick example) rolling window basis like : > > 1st data point = 1st data point of TS > 2nd data point = sum of 1st and 2nd data points of TS > 3rd data point = sum of 1st 2nd and 3rd data points of TS > > so on > > I am aware of the rollapply() function from zoo, however, appears like > it is only for fixed window size. > > Appreciate any pointer how to achieve above strategy of implementing > rolling calculation based on increased window size. > > Thanks for your time. > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.-- Joshua Ulrich | about.me/joshuaulrich FOSS Trading | www.fosstrading.com R/Finance 2017 | www.rinfinance.com
Christofer Bogaso
2017-Aug-10 18:39 UTC
[R] Zoo rolling window with increasing window size
Hi Joshua, thanks for your prompt reply. However as I said, sum() function I used here just for demonstrating the problem, I have other custom function to implement, not necessarily sum() I am looking for a generic solution for above problem. Any better idea? Thanks, On Fri, Aug 11, 2017 at 12:04 AM, Joshua Ulrich <josh.m.ulrich at gmail.com> wrote:> Use a `width` of integer index locations. And you likely want > "right" (or rollapplyr(), as I used). > > R> set.seed(21) > R> x <- rnorm(10) > R> rs <- rollapplyr(x, seq_along(x), sum) > R> cs <- cumsum(x) > R> identical(rs, cs) > [1] TRUE > > > On Thu, Aug 10, 2017 at 1:28 PM, Christofer Bogaso > <bogaso.christofer at gmail.com> wrote: >> Hi again, >> >> I am wondering there is any function for 'zoo' time series, where I >> can apply a user defined function rolling window basis, wherein window >> size is ever increasing i.e. not fixed. For example, let say I have >> below user defined function and a zoo time series : >> >>> library(zoo) >> >>> UDF = function(x) sum(x) >> >>> TS = zoo(rnorm(10), seq(as.Date('2017-01-01'), as.Date('2017-01-10'), by = '1 day')) >> >>> >> >> Now I want to apply UDF (this can be any custom function, however here >> I put it just quick example) rolling window basis like : >> >> 1st data point = 1st data point of TS >> 2nd data point = sum of 1st and 2nd data points of TS >> 3rd data point = sum of 1st 2nd and 3rd data points of TS >> >> so on >> >> I am aware of the rollapply() function from zoo, however, appears like >> it is only for fixed window size. >> >> Appreciate any pointer how to achieve above strategy of implementing >> rolling calculation based on increased window size. >> >> Thanks for your time. >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. > > > > -- > Joshua Ulrich | about.me/joshuaulrich > FOSS Trading | www.fosstrading.com > R/Finance 2017 | www.rinfinance.com