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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert