с использованием ddply

Мне нужно использовать group by на уровнях с ddply или aggregate, если этопроще Я не совсем уверен, как это сделать, так как мне нужно использовать cumsum в качестве агрегатной функции. Вот как выглядят мои данные:

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

ожидаемый результат:

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

Я пытался с помощью

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

но это неПодводя итог, я думаю, это потому, что столбец часов используется для группы и разделен на это ... Я думаю ... Я не уверен, что полностью понимаю, как работает агрегат. Есть ли способ, которым я мог бы получить требуемый вывод, используя агрегат или ddply?