2014-02-16 15 views

Antwort

45

Wie das?

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)) 

Oder wenn Sie verwenden die dplyr ‚s Leitungsführung:

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

Ergebnis in beiden Fällen:

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

Dank. Ich denke, um die gleiche Ausgabe wie die andere Methode zu erhalten, müsste ich mit einer "Ungroup" enden? –

+0

@RacingTadpole Nein. Wenn du die "Cumsum" über die ganze Tabelle haben willst, dann lege einfach nicht die 'group_by' an erster Stelle ab. –

Verwandte Themen