Простое применение ave
с группами, определенными переменной, вычисляемой с помощью трюка cumsum
, сделает то, что вы хотите.
ave(df1$A, rev(cumsum(rev(df1$B))), FUN = cumsum)
#[1] 1 3 6 10 5 11 18 8 17 27
Данные.
df1 <- read.table(text = "
A B C
1 FALSE 1
2 FALSE 3
3 FALSE 6
4 TRUE 10
5 FALSE 5
6 FALSE 11
7 TRUE 18
8 FALSE 8
9 FALSE 17
10 TRUE 27
", header = TRUE)