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