A rolling average smooths the most recent observations in an ordered series.

Program

Play the script to change the window size and see how the recent average moves.

window
rolling_average.R
Replay: real traced execution (multi-file project)
window <- 3
sales <- c(10, 12, 15, 18, 21)
recent <- tail(sales, window)
average <- round(mean(recent), 1)
label <- paste("avg", average, sep = ":")
cat(label, "\n", sep = "")
window <- 2
sales <- c(10, 12, 15, 18, 21)
recent <- tail(sales, window)
average <- round(mean(recent), 1)
label <- paste("avg", average, sep = ":")
cat(label, "\n", sep = "")
window <- 4
sales <- c(10, 12, 15, 18, 21)
recent <- tail(sales, window)
average <- round(mean(recent), 1)
label <- paste("avg", average, sep = ":")
cat(label, "\n", sep = "")
  1. window ← 3

    1window <- 32sales <- c(10, 12, 15, 18, 21)
    values this step3window
  2. sales ← 10, 12, 15, 18, 21

    1window <- 32sales <- c(10, 12, 15, 18, 21)3recent <- tail(sales, window)
    values this step10, 12, 15, 18, 21sales
  3. recent ← 15, 18, 21

    2sales <- c(10, 12, 15, 18, 21)3recent <- tail(sales, window)4average <- round(mean(recent), 1)
    values this step15, 18, 21recent5 observationssales3window
  4. average ← 18

    3recent <- tail(sales, window)4average <- round(mean(recent), 1)5label <- paste("avg", average, sep = ":")
    values this step18average15, 18, 21recent
  5. label ← avg:18

    4average <- round(mean(recent), 1)5label <- paste("avg", average, sep = ":")6cat(label, "\n", sep = "")
    values this stepavg:18label18average
  6. cat(label, " ", sep = "")

    5label <- paste("avg", average, sep = ":")6cat(label, "\n", sep = "")
    outputavg:18
    values this stepavg:18label
  1. window ← 2

    1window <- 22sales <- c(10, 12, 15, 18, 21)
    values this step2window
  2. sales ← 10, 12, 15, 18, 21

    1window <- 22sales <- c(10, 12, 15, 18, 21)3recent <- tail(sales, window)
    values this step10, 12, 15, 18, 21sales
  3. recent ← 18, 21

    2sales <- c(10, 12, 15, 18, 21)3recent <- tail(sales, window)4average <- round(mean(recent), 1)
    values this step18, 21recent5 observationssales2window
  4. average ← 19.5

    3recent <- tail(sales, window)4average <- round(mean(recent), 1)5label <- paste("avg", average, sep = ":")
    values this step19.5average18, 21recent
  5. label ← avg:19.5

    4average <- round(mean(recent), 1)5label <- paste("avg", average, sep = ":")6cat(label, "\n", sep = "")
    values this stepavg:19.5label19.5average
  6. cat(label, " ", sep = "")

    5label <- paste("avg", average, sep = ":")6cat(label, "\n", sep = "")
    outputavg:19.5
    values this stepavg:19.5label
  1. window ← 4

    1window <- 42sales <- c(10, 12, 15, 18, 21)
    values this step4window
  2. sales ← 10, 12, 15, 18, 21

    1window <- 42sales <- c(10, 12, 15, 18, 21)3recent <- tail(sales, window)
    values this step10, 12, 15, 18, 21sales
  3. recent ← 12, 15, 18, 21

    2sales <- c(10, 12, 15, 18, 21)3recent <- tail(sales, window)4average <- round(mean(recent), 1)
    values this step12, 15, 18, 21recent5 observationssales4window
  4. average ← 16.5

    3recent <- tail(sales, window)4average <- round(mean(recent), 1)5label <- paste("avg", average, sep = ":")
    values this step16.5average12, 15, 18, 21recent
  5. label ← avg:16.5

    4average <- round(mean(recent), 1)5label <- paste("avg", average, sep = ":")6cat(label, "\n", sep = "")
    values this stepavg:16.5label16.5average
  6. cat(label, " ", sep = "")

    5label <- paste("avg", average, sep = ":")6cat(label, "\n", sep = "")
    outputavg:16.5
    values this stepavg:16.5label
ordered series The vector order represents time order.
window `tail(sales, window)` selects the most recent observations.
smoothing `mean(recent)` summarizes the current window.