So gruppieren sie nach allen spalten außer einer in dplyr
Sie können die folgende grundlegende Syntax verwenden, um alle bis auf eine Spalte in einem Datenrahmen mithilfe des dplyr- Pakets in R zu gruppieren:
df %>%
group_by(across(c( - this_column)))
In diesem speziellen Beispiel wird der Datenrahmen nach allen Spalten mit Ausnahme der Spalte mit dem Namen this_column gruppiert.
Beachten Sie, dass das negative Vorzeichen ( – ) in der Formel dplyr anweist, diese bestimmte Spalte in der Funktion group_by() auszuschließen.
Das folgende Beispiel zeigt, wie diese Syntax in der Praxis verwendet wird.
Beispiel: Gruppieren Sie nach allen Spalten außer einer in dplyr
Angenommen, wir haben den folgenden Datenrahmen in R, der Informationen über verschiedene Basketballspieler enthält:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'), starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'), dots=c(99, 104, 119, 113)) #view data frame df team position starter points 1 AGY 99 2 AGY 104 3 AFY 119 4 AFN 113 5 BGY 99 6 BGN 104 7 BFN 119 8 BFN 113
Nehmen wir nun an, wir möchten den Maximalwert in der Punktespalte finden, gruppiert über alle anderen Spalten im Datenrahmen.
Wir können dazu die folgende Syntax verwenden:
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c( - points))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
Aus dem Ergebnis können wir sehen:
- Der maximale Punktwert für alle Spieler mit einem Teamwert von A, einem Positionswert von G und einem Startwert von Y betrug 104 .
- Der maximale Punktewert für alle Spieler mit einem Teamwert von A, einem Positionswert von F und einem Startwert von Y betrug 119 .
- Der maximale Punktwert für alle Spieler mit einem Teamwert von A, einem Positionswert von F und einem Startwert von N betrug 113 .
Und so weiter.
Beachten Sie, dass wir das gleiche Ergebnis auch erhalten könnten, wenn wir alle Spaltennamen außer den Punkten in die Funktion „group_by()“ eingeben würden:
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(team, position, starter))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
Dies entspricht dem Ergebnis des vorherigen Beispiels.
Beachten Sie jedoch, dass es viel einfacher ist, die Punktespalte in der Funktion group_by() auszuschließen, als die Namen aller anderen Spalten einzugeben.
Zusätzliche Ressourcen
In den folgenden Tutorials wird erläutert, wie Sie andere häufige Aufgaben mit dplyr ausführen:
So filtern Sie Zeilen, die eine bestimmte Zeichenfolge enthalten, mit dplyr
So berechnen Sie relative Häufigkeiten mit dplyr
So wählen Sie mit dplyr die erste Zeile nach Gruppe aus