У меня есть набор данных, который выглядит примерно так:
df <- data.frame("id" = c("Alpha", "Alpha", "Alpha","Alpha","Beta","Beta","Beta","Beta"),
"Year" = c(1970,1971,1972,1973,1974,1977,1978,1990),
"Group" = c(1,NA,1,NA,NA,2,2,NA),
"Val" = c(2,3,3,5,2,5,3,5))
И я хотел бы создать кумулятивную сумму "Val". Я знаю, как сделать простую кумулятивную сумму
df <- df %>% group_by(id) %>% mutate(cumval=cumsum(Val))
Однако я хотел бы, чтобы мои окончательные данные выглядели так:
final <- data.frame("id" = c("Alpha", "Alpha", "Alpha","Alpha","Beta","Beta","Beta","Beta"),
"Year" = c(1970,1971,1972,1973,1974,1977,1978,1990),
"Group" = c(1,NA,1,NA,NA,2,2,NA),
"Val" = c(2,3,3,5,2,5,3,5),
"cumval" = c(2,5,6,11,2,7,5,10))
Основная идея заключается в том, чтокогда два "Val" принадлежат одной и той же "группе", то, что происходит позже (год), заменяет предыдущий. Например, в образце набора данных наблюдение 3 имеет «cumval» 6, а не 8, поскольку «Val» во время 1972 года заменил «Val» во время 1970 года. Аналогично для Beta.
Благодарюзаранее за вашу помощь