2015-10-29 12 views
5

Ich möchte einen Datenrahmen zweimal mutieren, indem ich ihn durch zwei Gruppen von Spalten gruppiere, die sich überschneiden. d. h .:Hinzufügen einer weiteren Gruppierung mit dplyr

df <- df %>% group_by(a, b) %>% mutate(x = sum(d)) 
df <- df %>% group_by(a, b, c) %>% mutate(y = sum(e)) 

Gibt es eine schnellere/elegantere Möglichkeit, dies zu tun? Ich hatte gehofft, der Lage sein, etwas zu tun:

df <- df %>% 
    group_by(a, b) %>% 
    mutate(x = sum(d)) %>% 
    group_by(c) %>% 
    mutate(y = sum(e)) 

Oder vielleicht eine Variable mit dem ersten group_by speichern angewendet und dann zweimal verwenden.

Antwort

7

Wir verwenden add=TRUE in der zweiten group_by von 3 Variablen zu gruppieren, das Hinzufügen c in den OP der Beispiel-

df %>% 
    group_by(a, b) %>% 
    mutate(x = sum(d)) %>% 
    group_by(c, add=TRUE) %>% 
    mutate(y = sum(e)) 

in der Dokumentation nach für ?group_by

standardmäßig, wenn Add = FALSE , group_by überschreibt vorhandene Gruppen. Um stattdessen zu den bestehenden Gruppen hinzufügen, Add = TRUE

Dies kann in einem group_by Anruf erfolgen, sondern nur mit nicht-dplyrish Funktionen:

df %>% 
    group_by(a, b) %>% 
    mutate(x = sum(d), y = ave(e, c, sum)) 
+2

Inkonsitenzen Erwarten Sie bei der Verwendung von 'group_by (. .., add = TRUE) 'mit einer' data.table': https://github.com/hadley/dplyr/issues/1459 –

+0

Ich benutze 'length' und' rank' also denke ich nicht letztere Option ist verwendbar, schön, obwohl es zu wissen ist. –

Verwandte Themen