У меня есть следующий фрейм данных:
id = c("A","A","A","A","A","A","B","B","B","B","B","B","C","C","C","C","C","C")
month = c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6)
amount = c(0,0,10,0,0,0,0,10,0,10,0,0,0,0,0,10,10,0)
df <- data.frame(id, month, amount)
Что мне нужно сделать (по идентификатору): вычислить (посредством отрицательного числа) разницу в месяцах между нулевыми и ненулевыми строками «сумма» до тех пор, пока «сумма» не станет равной 0. Когда это произойдет, время = 0. ТОГДА, как только «сумма» превысит ноль в последовательности, расчет (путем положительного числа) будет оглядываться назад и вычислять разницу в месяцах между ненулевой и исторической нулевой строкой «сумма».
Решение будет выглядеть так:
solution = c(-2,-1,0,1,2,3,-1,0,1,0,1,2,-3,-2,-1,0,0,1)
Как вы, наверное, заметили, довольно сложно искать эту многоуровневую проблему. В идеале ответом будет использование data.table, так как я имею дело с миллионами строк, но dplyr также подойдет для моих нужд.
Любая помощь приветствуется.
S.