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