optimized rolling functions on irregular time series with time-based window

前端 未结 5 803
情深已故
情深已故 2020-12-01 09:42

Is there some way to use rollapply (from zoo package or something similar) optimized functions (rollmean, rollmedian etc) to compute r

5条回答
  •  有刺的猬
    2020-12-01 09:59

    I recommend using runner package which is optimized to do operation requested in this topic. Go to section Windows depending on date in documentation, for further explanation.

    To solve your task, one can use runner function which can execute any R function in running windows. One-liner here:

    df <- read.table(
      text = "date  value
       2011-11-01      5
       2011-11-01      4
       2011-11-01      2
       2011-11-08      1
       2011-11-13      0
       2011-11-14      0
       2011-11-15      0
       2011-11-18      1
       2011-11-21      4
       2011-12-05      3", header = TRUE, colClasses = c("Date", "integer"))
    
    library(runner)
    runner(df$value, k = 5, idx = df$date, f = median)
    [1] 5.0 4.5 4.0 1.0 0.0 0.0 0.0 0.0 2.5 3.0
    

    P.S. one should be aware that 5-days window is [i-4, i-3, i-2, i-1, i] instead of (i-5):i (6-days window). Illustration below for better explanation of the concept.
    I've made example on 5-days window but if one want to reproduce result as OP requested, can specify 6-days window:

    identical(
      runner(df$value, k = 6, idx = df$date, f = median),
      c(5.0, 4.5, 4.0, 1.0, 0.5, 0.0, 0.0, 0.0, 2.5, 3.0)
    )
    # [1] TRUE
    

提交回复
热议问题