cumsum usando ddply

Eu preciso usar o grupo por níveis com ddply ou agregado, se isso é mais fácil. Não tenho certeza de como fazer isso, pois preciso usar o cumsum como minha função agregada. É assim que meus dados se parecem:

level1      level2  hour     product 
A           tea     0          7
A           tea     1          2
A           tea     2          9
A           coffee  17         7
A           coffee  18         2
A           coffee  20         4
B           coffee  0          2
B           coffee  1          3
B           coffee  2          4
B           tea     21         3
B           tea     22         1

saída esperada:

A     tea     0   7
A     tea     1   9
A     tea     2   18
A     coffee  17  7
A     coffee  18  9
A     coffee  20  13
B     coffee  0   2
B     coffee  1   5
B     coffee  2   9
B     tea     21  3
B     tea     22  4

Eu tentei usar

ddply(dd,c("level1","level2","hour"),summarise,cumsum(product))

mas isso não resume o que eu acho que é porque a coluna hora está sendo usada para group by e está sendo dividida por isso ... eu acho .. Eu não tenho certeza se entendi completamente como o agregado funciona aqui. Existe alguma maneira que eu poderia obter o resultado desejado usando agregado ou ddply?

questionAnswers(2)

yourAnswerToTheQuestion