Kennt jemand eine schnelle Möglichkeit zur Auswahl von "all-but-one" (oder "alle-aber-einige-wenigen") Spalten bei der Verwendung von dplyr::group_by
? Letztendlich möchte ich nur nach Entfernen einiger ausgewählter Spalten über alle eindeutigen Zeilen aggregieren, aber ich möchte nicht jedes Mal alle Gruppierungsspalten explizit auflisten müssen (da diese in meiner Analyse häufig hinzugefügt und entfernt werden).Wählen Sie Minus-Operator in dplyr group_by
Beispiel:
> df <- data_frame(a = c(1,1,2,2), b = c("foo", "foo", "bar", "bar"), c = runif(4))
> df
Source: local data frame [4 x 3]
a b c
(dbl) (chr) (dbl)
1 1 foo 0.95460749
2 1 foo 0.05094088
3 2 bar 0.93032589
4 2 bar 0.40081121
Jetzt möchte ich von a
und b
, aggregieren, so kann ich dies tun:
> df %>% group_by(a, b) %>% summarize(mean(c))
Source: local data frame [2 x 3]
Groups: a [?]
a b mean(c)
(dbl) (chr) (dbl)
1 1 foo 0.5027742
2 2 bar 0.6655686
Großen. Aber, würde ich wirklich gerne in der Lage sein, etwas zu tun wie nur geben nichtc
, ähnlich wie dplyr::select(-c)
:
> df %>% select(-c)
Source: local data frame [4 x 2]
a b
(dbl) (chr)
1 1 foo
2 1 foo
3 2 bar
4 2 bar
Aber group_by
Ausdrücke anwenden können, so das Äquivalent nicht funktioniert:
> df %>% group_by(-c) %>% summarize(mean(c))
Source: local data frame [4 x 2]
-c mean(c)
(dbl) (dbl)
1 -0.95460749 0.95460749
2 -0.93032589 0.93032589
3 -0.40081121 0.40081121
4 -0.05094088 0.05094088
Wer weiß, wenn ich nur eine grundlegende Funktion oder Abkürzung fehlt, um mir das schnell zu tun?
Beispiel Anwendungsfall: Wenn df
gewinnt plötzlich eine neue Spalte d
, ich den Downstream-Code möchte nun Aggregat über eine einzigartige Kombination von a
, b
, undd
, ohne ich ausdrücklich d
zu den group_by
hinzufügen zu müssen Tel.)
'df%>% group_by _ (. Dots = setdiff (namen (df)," c "))%>% summieren (Mittelwert (c)) "Vielleicht? –
Yup, das ist, worauf ich mich festgelegt habe, es scheint nur ... klobig, irgendwie. Ich dachte, es könnte eine (mir unbekannte) Funktion geben, die Ausdrücke wie "-c" vor einer sofortigen Auswertung schützt, die dann so behandelt werden kann, als wären sie in einem "Auswahl" -Aufruf gemacht worden. Aber im Allgemeinen, ja, 'group_by_' und' setdiff' können den Trick machen, danke! – mmuurr
Ich stimme zu, dass man denken könnte, dass dies funktionieren sollte, da dies wie eine typische dplyr-Syntax aussieht. Vielleicht nachsehen, ob FR auf GH existiert, oder vielleicht wurde dies in der Entwicklungsversion implementiert. Wenn nicht, könnten Sie eine FR machen und sehen, wie es geht. –