Calculating moving average

前端 未结 16 1789
夕颜
夕颜 2020-11-21 23:55

I\'m trying to use R to calculate the moving average over a series of values in a matrix. The normal R mailing list search hasn\'t been very helpful though. There doesn\'t s

16条回答
  •  忘了有多久
    2020-11-22 00:27

    One can use runner package for moving functions. In this case mean_run function. Problem with cummean is that it doesn't handle NA values, but mean_run does. runner package also supports irregular time series and windows can depend on date:

    library(runner)
    set.seed(11)
    x1 <- rnorm(15)
    x2 <- sample(c(rep(NA,5), rnorm(15)), 15, replace = TRUE)
    date <- Sys.Date() + cumsum(sample(1:3, 15, replace = TRUE))
    
    mean_run(x1)
    #>  [1] -0.5910311 -0.2822184 -0.6936633 -0.8609108 -0.4530308 -0.5332176
    #>  [7] -0.2679571 -0.1563477 -0.1440561 -0.2300625 -0.2844599 -0.2897842
    #> [13] -0.3858234 -0.3765192 -0.4280809
    
    mean_run(x2, na_rm = TRUE)
    #>  [1] -0.18760011 -0.09022066 -0.06543317  0.03906450 -0.12188853 -0.13873536
    #>  [7] -0.13873536 -0.14571604 -0.12596067 -0.11116961 -0.09881996 -0.08871569
    #> [13] -0.05194292 -0.04699909 -0.05704202
    
    mean_run(x2, na_rm = FALSE )
    #>  [1] -0.18760011 -0.09022066 -0.06543317  0.03906450 -0.12188853 -0.13873536
    #>  [7]          NA          NA          NA          NA          NA          NA
    #> [13]          NA          NA          NA
    
    mean_run(x2, na_rm = TRUE, k = 4)
    #>  [1] -0.18760011 -0.09022066 -0.06543317  0.03906450 -0.10546063 -0.16299272
    #>  [7] -0.21203756 -0.39209010 -0.13274756 -0.05603811 -0.03894684  0.01103493
    #> [13]  0.09609256  0.09738460  0.04740283
    
    mean_run(x2, na_rm = TRUE, k = 4, idx = date)
    #> [1] -0.187600111 -0.090220655 -0.004349696  0.168349653 -0.206571573 -0.494335093
    #> [7] -0.222969541 -0.187600111 -0.087636571  0.009742884  0.009742884  0.012326968
    #> [13]  0.182442234  0.125737145  0.059094786
    

    One can also specify other options like lag, and roll only at specific indexes. More in package and function documentation.

提交回复
热议问题