# Calculate Moving Average, Maximum, Median & Sum of Time Series in R (6 Examples)

This tutorial shows how to **calculate moving averages, maxima, medians, and sums** in the R programming language.

The article looks as follows:

Letâ€™s dive right into the examples!

## Creation of Example Data

Weâ€™ll use the following data as basement for this R programming tutorial:

set.seed(98234) # Creating example series my_series <- 1:100 + rnorm(100, 0, 10) my_series # Printing series # -19.1265321 -4.2533086 13.8434357 -1.6570237 18.6339137 3.7275765 ...

Have a look at the previous output of the RStudio console. It shows that our example data is a series of numeric values with a length of 100. In a real application, this could be a time series.

## Example 1: Compute Moving Average Using User-Defined Function

In Example 1, Iâ€™ll explain how to create a user-defined function to calculate a moving average (also called rolling average or running average) in R.

We can create a new function called moving_average as shown below (credit to Matti Pastellâ€™s response in this thread):

moving_average <- function(x, n = 5) { # Create user-defined function stats::filter(x, rep(1 / n, n), sides = 2) }

Now, we can apply this function to our time series data:

my_moving_average_1 <- moving_average(my_series) # Apply user-defined function my_moving_average_1 # Printing moving average # NA NA 1.488097 6.058919 7.348637 5.377346 7.715196 4.944003 ...

The output are the moving averages of our time series.

## Example 2: Compute Moving Average Using rollmean() Function of zoo Package

In case you donâ€™t want to create your own function to compute rolling averages, this example is for you. Example 2 shows how to use the zoo package to calculate a moving average in R.

If we want to use the functions of the zoo package, we first need to install and load zoo:

install.packages("zoo") # Install zoo package library("zoo") # Load zoo

Now, we can use the rollmean function of the zoo package to calculate our running mean:

my_moving_average_2 <- rollmean(my_series, k = 5) # Apply rollmean function my_moving_average_2 # Printing moving average # 1.488097 6.058919 7.348637 5.377346 7.715196 4.944003 ...

The output values are the same as in Example 1 (without the NA values at the beginning and at the end of the output vector).

## Example 3: Compute Moving Maximum Using rollmax() Function of zoo Package

The following R programming code illustrates how to use the rollmax function of the zoo package to calculate the moving maximum in R.

my_moving_max <- rollmax(my_series, k = 5) # Apply rollmax function my_moving_max # Printing moving maximum # 18.63391 18.63391 18.63391 18.63391 18.63391 10.03223 31.52406 ...

## Example 4: Compute Moving Median Using rollmedian() Function of zoo Package

The R programming code below illustrates how to use the rollmedian function of the zoo package to return the moving median to the RStudio console.

my_moving_median <- rollmedian(my_series, k = 5) # Apply rollmedian function my_moving_median # Printing moving median # -1.657024 3.727576 3.727576 3.727576 3.986984 3.986984 4.777944 ...

## Example 5: Compute Moving Sum Using rollsum() Function of zoo Package

In this Example, Iâ€™ll illustrate how to apply the rollsum function of the zoo package to calculate the rolling sum in R.

my_moving_sum <- rollsum(my_series, k = 5) # Apply rollsum function my_moving_sum # Printing moving sum # 7.440485 30.294594 36.743183 26.886731 38.575982 24.720013 52.516494 ...

## Example 6: Draw Plot of Time Series, Moving Average, Maximum, Median & Sum

In the previous examples, I have explained how to compute different moving metrics in R. This Example explains how to draw all these values to a graphic.

plot(1:length(my_series), my_series, type = "l", # Plotting series & moving metrics ylim = c(min(my_series), max(my_moving_sum)), xlab = "Time Series", ylab = "Values") lines(1:length(my_series), c(NA, NA, my_moving_average_2, NA, NA), type = "l", col = 2) lines(1:length(my_series), c(NA, NA, my_moving_max, NA, NA), type = "l", col = 3) lines(1:length(my_series), c(NA, NA, my_moving_median, NA, NA), type = "l", col = 4) lines(1:length(my_series), c(NA, NA, my_moving_sum, NA, NA), type = "l", col = 5) legend("topleft", c("Time Series", "Moving Average", "Moving Maximum", "Moving Median", "Moving Sum"), lty = 1, col = 1:5)

Figure 1 shows the output of the previous R programming syntax: A plot showing the different moving metrics.

## Video, Further Resources & Summary

Have a look at the following video of my YouTube channel. I explain the topics of this tutorial in the video:

In addition, you might want to have a look at the related articles on this website. A selection of tutorials is shown below:

- Merge Time Series in R
- Draw Time Series Plot with Events Using ggplot2 Package
- Convert Data Frame with Date Column to Time Series Object
- All R Programming Examples

Summary: This post illustrated simple ways on how to **compute moving averages, maxima, medians, and sums** in the R programming language. Donâ€™t hesitate to let me know in the comments, in case you have any further questions.