R-aggregatiefunctie: summarise() & group_by() Voorbeeld

โšก Slimme samenvatting

De aggregatiefunctie in R met dplyr voegt meerdere rijen samen tot รฉรฉn statistiek per groep. Deze handleiding combineert `group_by()` met `summarise()` op de Lahman-slaggegevens om gemiddelden, sommen, spreidingen, aantallen en positiewaarden te berekenen over 104,324 waarnemingen.

  • ๐Ÿงฎ Kernwerkwoord: summarise(df, name = function(column)) retourneert รฉรฉn rij, en group_by() zet die eerst om in รฉรฉn rij per groep.
  • ๐Ÿ“Š Statistische families: Het gemiddelde en de mediaan beschrijven het centrum, de standaarddeviatie en de interkwartielafstand beschrijven de spreiding, en het minimum en maximum beschrijven het bereik.
  • ๐Ÿ”ข Tellen: n() telt het aantal rijen in de huidige groep en n_distinct() telt de unieke waarden daarin.
  • ๐Ÿ“ Positiehulpmiddelen: eerste(), laatste(), en n-de() voorbeeldtraceen specifieke observatie van elke groep.
  • ๐Ÿ”„ Werk met meerdere kolommen: across() past รฉรฉn functie toe op meerdere kolommen zonder de code voor elke kolom te herhalen.
  • ๐Ÿ”“ Grouping Hygiรซne: Roep altijd ungroup() aan vรณรณr een berekening die opnieuw op de hele tabel moet worden uitgevoerd.

R Geaggregeerde functie

Dataset gebruikt in deze handleiding

Door een variabele samen te vatten krijg je een eerste indruk van de data, maar door deze per groep samen te vatten krijg je veel meer inzicht in hoe de waarden verdeeld zijn. Deze tutorial laat zien hoe je een dataset per groep kunt samenvoegen met de dplyr-bibliotheek.

Deze handleiding maakt gebruik van de Lahman-battingdataset. Na het importeren en behouden van de gegevens...ping Het werkdataframe bevat, met slechts de negen kolommen die hieronder worden vermeld, 104,324 observaties en 9 variabelen:

  • spelerID: Speler-ID-code. Factor
  • jaarID: Jaar. Factor
  • teamID: Team. factor
  • lgID: Liga. Factor: AA AL FL NL PL UA
  • AB: Bij vleermuizen. Numeriek
  • G: Games: aantal games door een speler. Numeriek
  • R: loopt. Numeriek
  • HR: Homeruns. Numeriek
  • SH: Opofferingshits. Numeriek

Voordat u een samenvatting uitvoert, voert u de volgende stappen uit om de gegevens voor te bereiden:

  • Stap 1: Importeer de gegevens
  • Stap 2: Selecteer de relevante variabelen
  • Stap 3: Sorteer de gegevens
library(dplyr)

# Step 1
data <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/lahman-batting.csv") %>%

# Step 2
select(c(playerID, yearID, AB, teamID, lgID, G, R, HR, SH))  %>% 

# Step 3
arrange(playerID, teamID, yearID)

Een goede gewoonte bij het importeren van een dataset is om de functie glimp() te gebruiken om een โ€‹โ€‹idee te krijgen van de structuur van de dataset.

# Structure of the data
glimpse(data)

Output:

Observations: 104,324
Variables: 9
$ playerID <fctr> aardsda01, aardsda01, aardsda01, aardsda01, aardsda01, a...
$ yearID   <int> 2015, 2008, 2007, 2006, 2012, 2013, 2009, 2010, 2004, 196...
$ AB       <int> 1, 1, 0, 2, 0, 0, 0, 0, 0, 603, 600, 606, 547, 516, 495, ...
$ teamID   <fctr> ATL, BOS, CHA, CHN, NYA, NYN, SEA, SEA, SFN, ATL, ATL, A...
$ lgID     <fctr> NL, AL, AL, NL, AL, NL, AL, AL, NL, NL, NL, NL, NL, NL, ...
$ G        <int> 33, 47, 25, 45, 1, 43, 73, 53, 11, 158, 155, 160, 147, 15...
$ R        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 113, 84, 100, 103, 95, 75...
$ HR       <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 39, 29, 44, 38, 47, 34, 40...
$ SH       <int> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, ...

samenvatten()

De syntaxis van summarise() is eenvoudig en consistent met de andere werkwoorden in de dplyr-bibliotheek.

summarise(df, variable_name=condition) 
arguments: 
- `df`: Dataset used to construct the summary statistics 
- `variable_name=condition`: Formula to create the new variable

Kijk naar de onderstaande code:

summarise(data, mean_run =mean(R))

Code Uitleg

  • summarise(data, mean_run = mean(R)): Maakt een variabele met de naam mean_run die het gemiddelde is van de kolomrun uit de datasetgegevens.

Output:

##   mean_run
## 1 19.20114

Je kunt zoveel variabelen toevoegen als je wilt. Je geeft het gemiddelde aantal gespeelde games en het gemiddelde aantal sacrifice hits terug.

summarise(data, mean_games = mean(G),
    mean_SH = mean(SH, na.rm = TRUE))

Code Uitleg

  • mean_SH = mean(SH, na.rm = TRUE): Vat een tweede variabele samen. U stelt na.rm = TRUE in omdat de kolom SH ontbrekende observaties bevat.

Output:

##   mean_games  mean_SH
## 1   51.98361 2.340085

group_by() versus geen group_by()

Als summarise() op zichzelf wordt gebruikt, wordt het hele dataframe samengevoegd tot รฉรฉn rij, zoals de bovenstaande voorbeelden laten zien. De ware kracht ervan komt pas naar voren wanneer je group_by() toevoegt: de dplyr De bibliotheek past vervolgens dezelfde berekening afzonderlijk toe op elke groep en retourneert รฉรฉn rij per groep.

Merk op dat group_by perfect werkt met alle andere werkwoorden (dwz muteren(), filter(), arrange(), โ€ฆ).

Het is handig om de pijplijnoperator te gebruiken als u meer dan รฉรฉn stap hebt. U kunt de gemiddelde homerun per honkbalcompetitie berekenen.

data %>%
	group_by(lgID) %>%
	summarise(mean_run = mean(HR))

Code Uitleg

  • gegevens: gegevensset die wordt gebruikt om de samenvattende statistieken samen te stellen
  • group_by(lgID): Splits de gegevens op basis van de waarden van lgID voordat ze worden samengevat.
  • summarise(mean_run = mean(HR)): Bereken de gemiddelde homerun

Output:

## 
# A tibble: 7 x 2
##     lgID  mean_run
##   <fctr>     <dbl>
## 1     AA 0.9166667
## 2     AL 3.1270988
## 3     FL 1.3131313
## 4     NL 2.8595953
## 5     PL 2.5789474
## 6     UA 0.6216216
## 7   <NA> 0.2867133	

De pipe werkt ook met ggplot(), waardoor de hele keten van ruwe data tot de uiteindelijke grafiek in รฉรฉn statement blijft. De onderstaande code combineert group_by(), summarise() en ggplot() om het gemiddelde aantal homeruns per competitie als staafdiagram weer te geven.

U voert de volgende stap uit:

  • Stap 1: Selecteer dataframe
  • Stap 2: Groepsgegevens
  • Stap 3: Vat de gegevens samen
  • Stap 4: Maak een overzicht van de samenvattende statistieken
library(ggplot2)
# Step 1
data %>% 
#Step 2
group_by(lgID) %>% 
#Step 3
summarise(mean_home_run = mean(HR)) %>% 
#Step 4
ggplot(aes(x = lgID, y = mean_home_run, fill = lgID)) +
    geom_bar(stat = "identity") +
    theme_classic() +
    labs(
        x = "baseball league",
        y = "Average home run",
        title = paste(
            "Example group_by() with summarise()"
        )
    )

Output:

Groeperen op voorbeeld met Samenvatten

Functies die je kunt gebruiken binnen summarise()

Het werkwoord summarise() is compatibel met bijna alle functies in R. Hier is een korte lijst met nuttige functies die u samen met summarise() kunt gebruiken:

Objectief Functie Beschrijving
Basic gemeen() Gemiddelde van vector x
mediaan() Mediaan van vector x
som() Som van vector x
variatie SD() standaardafwijking van vector x
IQR() Interkwartiel van vector x
Verkrijgbaarheid: min () Minimaal vector x
max () Maximaal vector x
kwantiel() Kwantiel van vector x
Functie Eerst() Gebruiken met group_by() Eerste observatie van de groep
laatst() Gebruiken met group_by(). Laatste observatie van de groep
nde() Gebruiken met group_by(). zoveelste observatie van de groep
Tellen n () Gebruiken met group_by(). Tel het aantal rijen
n_distinct() Gebruiken met group_by(). Tel het aantal verschillende waarnemingen

De onderstaande secties behandelen een voorbeeld voor elke functie in de bovenstaande tabel. Als je nog niet bekend bent met de pipe en de andere werkwoorden, begin dan met de volgende. Handleiding voor selecteren, filteren en sorteren.

Basis functie

In het vorige voorbeeld hebt u de samenvattende statistiek niet in een gegevensframe opgeslagen.

Je kunt in twee stappen een dataframe genereren vanuit een samenvatting:

  • Stap 1: Bewaar het dataframe voor verder gebruik
  • Stap 2: Gebruik de dataset om een โ€‹โ€‹lijndiagram te maken

Stap 1) U berekent het gemiddeld aantal gespeelde wedstrijden per jaar.

## Mean
ex1 <- data %>%
	group_by(yearID) %>%
	summarise(mean_game_year = mean(G))
head(ex1)

Code Uitleg

  • De samenvattende statistiek van de batting-dataset wordt opgeslagen in het dataframe ex1.

Output:

## # A tibble: 6 x 2
##   yearID mean_game_year
##    <int>          <dbl>
## 1   1871       23.42308
## 2   1872       18.37931
## 3   1873       25.61538
## 4   1874       39.05263
## 5   1875       28.39535
## 6   1876       35.90625	

Stap 2) U toont de samenvattende statistiek met een lijndiagram en ziet de trend.

# Plot the graph
ggplot(ex1, aes(x = yearID, y = mean_game_year)) +
    geom_line() +
    theme_classic() +
    labs(
        x = "Year",
        y = "Average games played",
        title = paste(
            "Average games played from 1871 to 2016"
        )
    )

Output:

Voorbeeld van basisfunctie

Subinstelling

De functie summarise() is compatibel met subsetting.

## Subsetting + Median
data %>%
group_by(lgID) %>%
summarise(median_at_bat_league = median(AB), 
	#Compute the median without the zero 
	median_at_bat_league_no_zero = median(AB[AB > 0]))

Code Uitleg

  • mediaan_at_bat_league_no_zero = mediaan(AB[AB > 0]): De variabele AB bevat veel 0. U kunt de mediaan van de aan slag variabele met en zonder 0.

Output:

## # A tibble: 7 x 3
##     lgID median_at_bat_league median_at_bat_league_no_zero
##   <fctr>                <dbl>                        <dbl>
## 1     AA                  130                          131
## 2     AL                   38                           85
## 3     FL                   88                           97
## 4     NL                   56                           67
## 5     PL                  238                          238
## 6     UA                   35                           35
## 7   <NA>                  101                          101	

Som

Een andere handige functie om de variabele te aggregeren is sum().

Je kunt controleren welke competities de meeste homeruns hebben.

## Sum
data %>%
	group_by(lgID) %>%
	summarise(sum_homerun_league = sum(HR))

Output:

## # A tibble: 7 x 2
##     lgID sum_homerun_league
##   <fctr>              <int>
## 1     AA                341
## 2     AL              29426
## 3     FL                130
## 4     NL              29817
## 5     PL                 98
## 6     UA                 46
## 7   <NA>                 41	

Standaarddeviatie

De spreiding in de gegevens wordt berekend met de standaarddeviatie of sd() in R.

# Spread
data %>%
	group_by(teamID) %>%
	summarise(sd_at_bat_league = sd(HR))

Output:

## # A tibble: 148 x 2
##    teamID sd_at_bat_league
##    <fctr>            <dbl>
##  1    ALT               NA
##  2    ANA        8.7816395
##  3    ARI        6.0765503
##  4    ATL        8.5363863
##  5    BAL        7.7350173
##  6    BFN        1.3645163
##  7    BFP        0.4472136
##  8    BL1        0.6992059
##  9    BL2        1.7106757
## 10    BL3        1.0000000
## # ... with 138 more rows		

Het verschil in homeruns verschilt sterk tussen de teams, en ALT geeft NA terug omdat dat team slechts รฉรฉn rij heeft, waardoor er geen standaarddeviatie kan worden berekend.

Minimaal en maximaal

U kunt toegang krijgen tot het minimum en het maximum van een vector met de functies min() en max().

De onderstaande code retourneert het laagste en hoogste aantal wedstrijden dat een speler in een seizoen heeft gespeeld.

# Min and max
data %>%
	group_by(playerID) %>%
	summarise(min_G = min(G),
    max_G = max(G))

Output:

## # A tibble: 10,395 x 3
##     playerID min_G max_G
##       <fctr>       <int>
##  1 aardsda01    53    73
##  2 aaronha01   120   156
##  3  aasedo01    24    66
##  4  abadfe01    18    18
##  5 abadijo01    11    11
##  6 abbated01     3   153
##  7 abbeybe01    11    11
##  8 abbeych01    80   132
##  9 abbotgl01     5    23
## 10 abbotji01    13    29
## # ... with 10,385 more rows

Tellen

Het tellen van waarnemingen per groep is altijd nuttig. In R geeft n() het aantal rijen in de huidige groep terug.

De onderstaande code berekent bijvoorbeeld het aantal jaren dat elke speler heeft gespeeld.

# count observations
data %>%
	group_by(playerID) %>%
	summarise(number_year = n()) %>%
	arrange(desc(number_year))

Output:

## # A tibble: 10,395 x 2
##     playerID number_year
##       <fctr>       <int>
##  1 pennohe01          11
##  2 joosted01          10
##  3 mcguide01          10
##  4  rosepe01          10
##  5 davisha01           9
##  6 johnssi01           9
##  7  kaatji01           9
##  8 keelewi01           9
##  9 marshmi01           9
## 10 quirkja01           9
## # ... with 10,385 more rows

Eerste en laatste

U kunt de eerste, laatste of n-de positie van een groep selecteren.

U kunt bijvoorbeeld van elke speler het eerste en het laatste jaartal vinden.

# first and last
data %>%
	group_by(playerID) %>%
	summarise(first_appearance = first(yearID),
		last_appearance = last(yearID))

Output:

## # A tibble: 10,395 x 3
##     playerID first_appearance last_appearance
##       <fctr>            <int>           <int>
##  1 aardsda01             2009            2010
##  2 aaronha01             1973            1975
##  3  aasedo01             1986            1990
##  4  abadfe01             2016            2016
##  5 abadijo01             1875            1875
##  6 abbated01             1905            1897
##  7 abbeybe01             1894            1894
##  8 abbeych01             1895            1897
##  9 abbotgl01             1973            1979
## 10 abbotji01             1992            1996
## # ... with 10,385 more rows

nde observatie

De functie nth() is een aanvulling op first() en last(). Deze functie retourneert de waarneming op de index die je binnen elke groep doorgeeft.

U kunt bijvoorbeeld alleen filteren op het tweede jaar dat een team heeft gespeeld.

# nth
data %>%
	group_by(teamID) %>%
	summarise(second_game = nth(yearID, 2)) %>%
	arrange(second_game)

Output:

## # A tibble: 148 x 2
##    teamID second_game
##    <fctr>       <int>
##  1    BS1        1871
##  2    CH1        1871
##  3    FW1        1871
##  4    NY2        1871
##  5    RC1        1871
##  6    BR1        1872
##  7    BR2        1872
##  8    CL1        1872
##  9    MID        1872
## 10    TRO        1872
## # ... with 138 more rows

Een verschillend aantal waarnemingen

n() geeft het aantal rijen in de huidige groep terug. De verwante functie n_distinct() telt in plaats daarvan unieke waarden.

In het volgende voorbeeld tel je het totaal aantal spelers op dat een team gedurende alle periodes heeft gerecruteerd.

# distinct values
data %>%
	group_by(teamID) %>%
	summarise(number_player = n_distinct(playerID)) %>%
	arrange(desc(number_player))

Code Uitleg

  • group_by(teamID): Groeperen op team
  • samenvatten(number_player = n_onderscheiden(playerID)): Tel het aantal unieke spelers per team
  • arrange(desc(number_player)): Sorteer de gegevens op het aantal spelers

Output:

## # A tibble: 148 x 2
##    teamID number_player
##    <fctr>         <int>
##  1    CHN           751
##  2    SLN           729
##  3    PHI           699
##  4    PIT           683
##  5    CIN           679
##  6    BOS           647
##  7    CLE           646
##  8    CHA           636
##  9    DET           623
## 10    NYA           612
## # ... with 138 more rows

Meerdere groepen

Er kan een samenvattende statistiek voor meerdere groepen worden gerealiseerd.

# Multiple groups
data %>%
	group_by(yearID, teamID) %>%
	summarise(mean_games = mean(G)) %>%
	arrange(desc(teamID, yearID))

Code Uitleg

  • group_by(yearID, teamID): Groeperen op jaar en team
  • summarise(mean_games = mean(G)): Bereken het gemiddelde aantal gespeelde games
  • arrange(desc(teamID, yearID)): Sorteer de gegevens op team en jaar

Output:

## # A tibble: 2,829 x 3
## # Groups:   yearID [146]
##    yearID teamID mean_games
##     <int> <fctr>      <dbl>
##  1   1884    WSU   20.41667
##  2   1891    WS9   46.33333
##  3   1886    WS8   22.00000
##  4   1887    WS8   51.00000
##  5   1888    WS8   27.00000
##  6   1889    WS8   52.42857
##  7   1884    WS7    8.00000
##  8   1875    WS6   14.80000
##  9   1873    WS5   16.62500
## 10   1872    WS4    4.20000
## # ... with 2,819 more rows

Filter

Voordat u van plan bent een bewerking uit te voeren, kunt u de dataset filteren. De dataset begint in 1871 en de analyse heeft de jaren vรณรณr 1980 niet nodig.

# Filter
data %>%
	filter(yearID > 1980) %>%
	group_by(yearID) %>%
	summarise(mean_game_year = mean(G))

Code Uitleg

  • filter(yearID > 1980): Filter de gegevens om alleen de relevante jaren weer te geven (dat wil zeggen na 1980)
  • group_by(yearID): Groeperen op jaar
  • summarise(mean_game_year = mean(G)): Vat de gegevens samen

Output:

## # A tibble: 36 x 2
##    yearID mean_game_year
##     <int>          <dbl>
##  1   1981       40.64583
##  2   1982       56.97790
##  3   1983       60.25128
##  4   1984       62.97436
##  5   1985       57.82828
##  6   1986       58.55340
##  7   1987       48.74752
##  8   1988       52.57282
##  9   1989       58.16425
## 10   1990       52.91556
## # ... with 26 more rows

degroeperen

Tot slot moet je de groep verwijderen.ping voordat het niveau waarop een berekening wordt uitgevoerd, wordt gewijzigd. Zonder ungroup() zou de tweede summarise() nog steeds per speler werken.

# Ungroup the data
data %>%
	filter(HR > 0) %>%
	group_by(playerID) %>%
	summarise(average_HR_game = sum(HR) / sum(G)) %>%
	ungroup() %>%
	summarise(total_average_homerun = mean(average_HR_game))

Code Uitleg

  • filter(HR >0): Sluit nul homerun uit
  • group_by(playerID): groeperen op speler
  • summarise(average_HR_game = sum(HR)/sum(G)): Bereken gemiddelde homerun per speler
  • ungroup(): verwijder de groepping
  • summarise(total_average_homerun = mean(average_HR_game)): Vat de gegevens samen

Output:

## # A tibble: 1 x 1
##   total_average_homerun
##                   <dbl>
## 1            0.06882226	

Hoe meerdere kolommen samen te vatten met across()

Elk van de bovenstaande voorbeelden benoemt รฉรฉn kolom tegelijk. Wanneer dezelfde statistiek voor meerdere kolommen nodig is, past across() deze in รฉรฉn keer op al deze kolommen toe.

# One function, several columns
data %>%
    group_by(lgID) %>%
    summarise(across(c(R, HR, G), mean, .names = "mean_{.col}"))

# Every numeric column at once
data %>%
    group_by(lgID) %>%
    summarise(across(where(is.numeric), mean, na.rm = TRUE))

# Several functions applied to several columns
data %>%
    group_by(teamID) %>%
    summarise(across(c(R, HR), list(avg = mean, total = sum)))

Drie argumenten bepalen het gedrag:

  • .cols: de kolommen waarop de bewerking moet worden uitgevoerd, geschreven met dezelfde hulpfuncties als select(), inclusief where(is.numeric).
  • .fns: รฉรฉn functie, of een benoemde lijst met functies die op elke kolom moeten worden toegepast.
  • .namen: het naamgevingspatroon voor de uitvoer, waarbij {.col} de kolom is en {.fn} de functienaam.

De functie across() verving de oudere hulpfuncties summarise_all(), summarise_at() en summarise_if() in dplyr 1.0.0. Deze functies werken nog steeds, maar zijn verouderd, dus nieuwe code moet across() gebruiken.

Veelvoorkomende summarise()-fouten en hoe je ze kunt oplossen

Vier problemen zijn verantwoordelijk voor de meeste mislukte aggregaties.

  • Het resultaat is NA. mean() en sum() retourneren NA als er een waarde ontbreekt. Voeg na.rm = TRUE toe, zoals in het mean_SH-voorbeeld hierboven.
  • Het bericht "summarise() heeft gegroepeerde uitvoer". Grouping Als je twee variabelen gebruikt, blijven de resultaten gegroepeerd op basis van de eerste variabele. Gebruik `.groups = โ€œdropโ€` om de groepering te verwijderen.pingOf roep daarna ungroup() aan.
  • Een latere berekening geeft een onjuist niveau. Een dataframe blijft gegroepeerd totdat je de groepering opheft, dus er wordt nog steeds een tweede summarise()-functie per groep uitgevoerd. Dit is precies wat het ungroup()-voorbeeld laat zien.
  • De uitvoer bevat meer rijen dan verwacht. summarise() retourneert รฉรฉn rij per groep, dus een onbedoelde groepping De variabele vermenigvuldigt de uitvoer. Controleer de regel "Groups:" die boven elke tibble wordt weergegeven.
# Drop the grouping as part of the call
data %>%
    group_by(yearID, teamID) %>%
    summarise(mean_games = mean(G), .groups = "drop")

summarise() in R: Functiereferentie

Om een โ€‹โ€‹samenvatting per groep te krijgen, moet u de gegevens eerst splitsen:

# group by X1, X2, X3
group_by(df, X1, X2, X3)

en verwijder de grondping wanneer het berekeningsniveau verandert:

ungroup(df)

De onderstaande tabel geeft een overzicht van alle functies die in deze handleiding met summarise() worden gebruikt:

Methode Functie Code
gemiddelde gemiddelde
summarise(df, mean_x1 = mean(x1))
mediaan mediaan
summarise(df, median_x1 = median(x1))
som som
summarise(df, sum_x1 = sum(x1))
standaardafwijking sd
summarise(df, sd_x1 = sd(x1))
interkwartiel I.Q.R.
summarise(df, interquartile_x1 = IQR(x1))
minimum Min
summarise(df, minimum_x1 = min(x1))
maximaal max
summarise(df, maximum_x1 = max(x1))
kwantiel kwantiel
summarise(df, quantile_x1 = quantile(x1, probs = 0.75))
eerste waarneming eerste
summarise(df, first_x1 = first(x1))
laatste waarneming laatste
summarise(df, last_x1 = last(x1))
nde observatie zoveelste
summarise(df, nth_x1 = nth(x1, 2))
aantal voorkomen n
summarise(df, n_x1 = n())
aantal afzonderlijke gebeurtenissen n_onderscheiden
summarise(df, n_distinct_x1 = n_distinct(x1))

Veelgestelde vragen

`summarise()` voegt elke groep samen tot รฉรฉn rij met statistieken. `mutate()` behoudt elke rij en voegt een nieuwe kolom toe. Gebruik `mutate()` wanneer de groepsstatistiek naast de oorspronkelijke waarnemingen moet staan.

Grouping Als je twee of meer variabelen gebruikt, worden de resultaten gegroepeerd op alle variabelen behalve de laatste. dplyr waarschuwt je hiervoor, omdat latere werkwoorden stilzwijgend per groep zouden worden uitgevoerd. Gebruik `.groups = โ€œdropโ€` om dit te voorkomen.

n() telt elke rij in de huidige groep, inclusief herhalingen. n_distinct() telt unieke waarden in een kolom. Het tellen van spelers per team vereist n_distinct(), omdat รฉรฉn speler in meerdere seizoenen voorkomt.

Aggregaties op groepsniveau, zoals klantgemiddelden, aantallen en recentheidswaarden, behoren tot de sterkste voorspellers in tabulaire AI-modellen. `group_by()` in combinatie met `summarise()` is de standaardmethode om deze op reproduceerbare wijze op te bouwen.

Ja. AI-assistenten kunnen aggregate() en tapply() herschrijven als group_by() en summarise() pipelines. Vergelijk het aantal rijen in beide versies, omdat standaard R en dplyr ontbrekende groepen anders behandelen.

Vat dit bericht samen met: