Groeperen op alle kolommen behalve één in dplyr


U kunt de volgende basissyntaxis gebruiken om op één na alle kolommen in een dataframe te groeperen met behulp van het dplyr- pakket in R:

 df %>%
  group_by(across(c( - this_column)))

In dit specifieke voorbeeld wordt het dataframe gegroepeerd op alle kolommen behalve degene genaamd this_column .

Merk op dat het negatieve teken ( ) in de formule dplyr vertelt om die specifieke kolom uit te sluiten in de group_by() functie.

Het volgende voorbeeld laat zien hoe u deze syntaxis in de praktijk kunt gebruiken.

Voorbeeld: groepeer op alle kolommen behalve één in dplyr

Stel dat we het volgende dataframe in R hebben dat informatie bevat over verschillende basketbalspelers:

 #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

Stel nu dat we de maximale waarde in de puntenkolom willen vinden, gegroepeerd over alle andere kolommen in het gegevensframe.

We kunnen hiervoor de volgende syntaxis gebruiken:

 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

Uit het resultaat kunnen we zien:

  • De maximale puntwaarde voor alle spelers met een teamwaarde van A, positiewaarde van G en startwaarde van Y was 104 .
  • De maximale puntwaarde voor alle spelers met een teamwaarde van A, een positiewaarde van F en een startwaarde van Y was 119 .
  • De maximale puntwaarde voor alle spelers met een teamwaarde van A, een positiewaarde van F en een startwaarde van N was 113 .

Enzovoort.

Merk op dat we hetzelfde resultaat zouden kunnen krijgen als we elke kolomnaam, behalve de punten, in de functie group_by() zouden typen:

 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

Dit komt overeen met het resultaat van het vorige voorbeeld.

Houd er echter rekening mee dat het veel eenvoudiger is om de puntenkolom in de group_by()- functie uit te sluiten in plaats van de namen van alle andere kolommen te typen.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken kunt uitvoeren met dplyr:

Hoe u rijen kunt filteren die een bepaalde tekenreeks bevatten met behulp van dplyr
Hoe relatieve frequenties te berekenen met behulp van dplyr
Hoe u de eerste rij per groep selecteert met dplyr

Einen Kommentar hinzufügen

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