set.seed(123) df <- data.frame(x = sample(1:10, 20, replace = T), id = rep(1:2, each = 10)) For each id , I want to create a column which has the sum of previous 5 x values. df %>% group_by(id) %>% mutate(roll.sum = c(x[1:4], zoo::rollapply(x, 5, sum))) # Groups: id [2] x id roll.sum <int> <int> <int> 3 1 3 8 1 8 5 1 5 9 1 9 10 1 10 1 1 36 6 1 39 9 1 40 6 1 41 5 1 37 10 2 10 5 2 5 7 2 7 6 2 6 2 2 2 9 2 39 3 2 32 1 2 28 4 2 25 10 2 29 The 6th row should be 35 (3 + 8 + 5 + 9 + 10) , the 7th row should be 33 (8 + 5 + 9 + 10 + 1) and so on. However, the above function is also including the row