Build a demo data set
set.seed(1234)
df1 <- data.frame(x = 1, y = sample(1:10, 4, replace = TRUE))
df2 <- data.frame(x = 2, y = sample(1:10, 6, replace = TRUE))
df3 <- data.frame(x = 3, y = sample(1:10, 12, replace = TRUE))
df4 <- data.frame(x = 4, y = sample(1:10, 8, replace = TRUE))
df <- rbind(df1, df2, df3, df4)
Calculate running average of y, by group x
d <- as.data.frame(mutate(group_by(df,x), RunningMean = round(cummean(y), 2)))
(d)
## x y RunningMean
## 1 1 2 2.00
## 2 1 7 4.50
## 3 1 7 5.33
## 4 1 7 5.75
## 5 2 9 9.00
## 6 2 7 8.00
## 7 2 1 5.67
## 8 2 3 5.00
## 9 2 7 5.40
## 10 2 6 5.50
## 11 3 7 7.00
## 12 3 6 6.50
## 13 3 3 5.33
## 14 3 10 6.50
## 15 3 3 5.80
## 16 3 9 6.33
## 17 3 3 5.86
## 18 3 3 5.50
## 19 3 2 5.11
## 20 3 3 4.90
## 21 3 4 4.82
## 22 3 4 4.75
## 23 4 2 2.00
## 24 4 1 1.50
## 25 4 3 2.00
## 26 4 9 3.75
## 27 4 6 4.20
## 28 4 10 5.17
## 29 4 9 5.71
## 30 4 1 5.12