Calculating moving average

前端 未结 16 1796
夕颜
夕颜 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:33

    In order to complement the answer of cantdutchthis and Rodrigo Remedio;

    moving_fun <- function(x, w, FUN, ...) {
      # x: a double vector
      # w: the length of the window, i.e., the section of the vector selected to apply FUN
      # FUN: a function that takes a vector and return a summarize value, e.g., mean, sum, etc.
      # Given a double type vector apply a FUN over a moving window from left to the right, 
      #    when a window boundary is not a legal section, i.e. lower_bound and i (upper bound) 
      #    are not contained in the length of the vector, return a NA_real_
      if (w < 1) {
        stop("The length of the window 'w' must be greater than 0")
      }
      output <- x
      for (i in 1:length(x)) {
         # plus 1 because the index is inclusive with the upper_bound 'i'
        lower_bound <- i - w + 1
        if (lower_bound < 1) {
          output[i] <- NA_real_
        } else {
          output[i] <- FUN(x[lower_bound:i, ...])
        }
      }
      output
    }
    
    # example
    v <- seq(1:10)
    
    # compute a MA(2)
    moving_fun(v, 2, mean)
    
    # compute moving sum of two periods
    moving_fun(v, 2, sum)
    

提交回复
热议问题