2014-02-16 71 views
25

我作爲this post同樣的問題,但我想用dplyr如何使用dplyr將累積列添加到R數據框?

被R數據框,如:

df <- data.frame(id = rep(1:3, each = 5) 
       , hour = rep(1:5, 3) 
       , value = sample(1:15)) 

如何添加該ID相匹配的累積和列?

沒有dplyr以前的帖子中接受的解決方案是:

df$csum <- ave(df$value, df$id, FUN=cumsum) 

回答

45

喜歡這個?

df <- data.frame(id = rep(1:3, each = 5) 
       , hour = rep(1:5, 3) 
       , value = sample(1:15)) 

mutate(group_by(df,id), cumsum=cumsum(value)) 

或者,如果您使用dplyr的管道運營商:

df %>% group_by(id) %>% mutate(cumsum = cumsum(value)) 

結果在這兩種情況下:

Source: local data frame [15 x 4] 
Groups: id 

    id hour value cumsum 
1 1 1  4  4 
2 1 2 14  18 
3 1 3  8  26 
4 1 4  2  28 
5 1 5  3  31 
6 2 1 10  10 
7 2 2  7  17 
8 2 3  5  22 
9 2 4 12  34 
10 2 5  9  43 
11 3 1  6  6 
12 3 2 15  21 
13 3 3  1  22 
14 3 4 13  35 
15 3 5 11  46 
+0

感謝。我想要得到與其他方法相同的輸出,我需要用'ungroup'完成? –

+0

@RacingTadpole號碼如果您希望整個桌子上的'cumsum'只是首先不要放在'group_by'中。 –