У меня есть следующий кадр данных:R - расчеты последовательности как вперед, так и назад, глядя
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)
Что мне нужно сделать (по идентификатору) является: Calculate (путем отрицательного числа) разница в месяцев между нулевыми и ненулевыми «суммами» строк до тех пор, пока «сумма» не будет равна 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 также будет соответствовать моим потребностям.
Любая помощь приветствуется.
С.
Ваши векторы имеют разную длину, как вы можете ожидать получить прямоугольные данные, такие как DF, от этого? –
Возможно, у вас возникли проблемы с его получением в data.frame, потому что у вас есть только 5 A, B и Cs. Должно иметь 6. – emehex