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.