Как подсказал @thelatemail, вы можете использовать cut
для создания групп, затем sum
значения в каждой группе и, наконец, cumsum
для всех значений.
library(dplyr)
tbl %>%
group_by(quarter = cut(PERIOD, c(1,4,8,Inf), labels=c(4,8,12))) %>%
summarise(CUMSUM = sum(INCREM)) %>%
ungroup() %>%
mutate(CUMSUM = cumsum(CUMSUM))
# quarter CUMSUM
# <fct> <dbl>
#1 4 60
#2 8 30
#3 12 0
Используя ту же логику, слишком сложный подход base R для размещения в одной строке:
transform(aggregate(INCREM~PERIOD,
transform(tbl, PERIOD = cut(PERIOD, c(1,4,8,Inf), labels=c(4,8,12))), sum),
INCREM = cumsum(INCREM))
# PERIOD INCREM
#1 4 60
#2 8 30
#3 12 0
что на самом деле означает
tbl$PERIOD <- cut(tbl$PERIOD, c(1,4,8,Inf), labels=c(4,8,12))
tbl1 <- aggregate(INCREM~PERIOD, tbl, sum)
tbl1$INCREM <- cumsum(tbl1$INCREM)