Table of Contents
Yes, calculating a cumulative average in R is a relatively easy task. This can be done by using the cumsum() and length() functions together to calculate the cumulative sum of a vector and then divide it by the length of the vector respectively. This will give you the cumulative average of the vector. Additionally, the more efficient ‘reduce()’ function can be used to calculate the cumulative average in less time.
A cumulative average tells us the average of a series of values up to a certain point.
You can use the following methods to calculate the cumulative average of values in R:
Method 1: Use Base R
cum_avg <- cumsum(x) / seq_along(x)
Method 2: Use dplyr
library(dplyr)
cum_avg <- cummean(x)
Both methods return the exact same result, but the dplyr method tends to work faster on large data frames.
The following examples show how to use each method in practice with the following data frame in R:
#create data frame df <- data.frame(day=seq(1:16), sales=c(3, 6, 0, 2, 4, 1, 0, 1, 4, 7, 3, 3, 8, 3, 5, 5)) #view head of data frame head(df) day sales 1 1 3 2 2 6 3 3 0 4 4 2 5 5 4 6 6 1
Example 1: Calculate Cumulative Average Using Base R
We can use the following code to add a new column to our data frame that shows the cumulative average of sales:
#add new column that contains cumulative avg. of sales
df$cum_avg_sales <- cumsum(df$sales) / seq_along(df$sales)
#view updated data frame
df
day sales cum_avg_sales
1 1 3 3.000000
2 2 6 4.500000
3 3 0 3.000000
4 4 2 2.750000
5 5 4 3.000000
6 6 1 2.666667
7 7 0 2.285714
8 8 1 2.125000
9 9 4 2.333333
10 10 7 2.800000
11 11 3 2.818182
12 12 3 2.833333
13 13 8 3.230769
14 14 3 3.214286
15 15 5 3.333333
16 16 5 3.437500
We would interpret the cumulative average values as:
- The cumulative average of the first sales value is 3.
- The cumulative average of the first two sales values is 4.5.
- The cumulative average of the first three sales values is 3.
- The cumulative average of the first four sales values is 2.75.
And so on.
Example 2: Calculate Cumulative Average Using dplyr
We can also use the cummean function from the package in R to calculate a cumulative average.
library(dplyr)
#add new column that contains cumulative avg. of sales
df$cum_avg_sales <- cummean(df$sales)
#view updated data frame
df
day sales cum_avg_sales
1 1 3 3.000000
2 2 6 4.500000
3 3 0 3.000000
4 4 2 2.750000
5 5 4 3.000000
6 6 1 2.666667
7 7 0 2.285714
8 8 1 2.125000
9 9 4 2.333333
10 10 7 2.800000
11 11 3 2.818182
12 12 3 2.833333
13 13 8 3.230769
14 14 3 3.214286
15 15 5 3.333333
16 16 5 3.437500
Notice that this method returns the exact same results as the previous method.
The following tutorials explain how to calculate other common metrics in R: