R накопленная сумма по условию со сбросом

У меня есть вектор чисел в data.frame, как показано ниже.

df <- data.frame(a = c(1,2,3,4,2,3,4,5,8,9,10,1,2,1))

Мне нужно создать новый столбец, который дает количество записей, которые больше, чем их предшественник. Результирующий вектор столбца должен быть таким:

0,1,2,3,0,1,2,3,4,5,6,0,1,0

Моя попытка состоит в том, чтобы создать «флаг» столбца различий, чтобы пометить, когда значения больше.

df$flag <- c(0,diff(df$a)>0)
> df$flag
 [1] 0 1 1 1 0 1 1 1 1 1 1 0 1 0

Затем я могу применить магию dplyr group / sum, чтобы получить почти правильный ответ, за исключением того, что сумма не сбрасывается, когда flag == 0:

df %>% group_by(flag) %>% mutate(run=cumsum(flag))

    a flag run
1   1    0   0
2   2    1   1
3   3    1   2
4   4    1   3
5   2    0   0
6   3    1   4
7   4    1   5
8   5    1   6
9   8    1   7
10  9    1   8
11 10    1   9
12  1    0   0
13  2    1  10
14  1    0   0

Я не хочу прибегать к циклу for (), потому что у меня есть несколько таких бегущих сумм для вычисления нескольких сотен тысяч строк в data.frame.

Ответы на вопрос(3)

Ваш ответ на вопрос