R-Aggregatfunktionen: summarise() & group_by() Beispiel

โšก Intelligente Zusammenfassung

Die Aggregatfunktion in R mit dplyr fasst mehrere Zeilen zu einer einzigen Statistik pro Gruppe zusammen. Diese Anleitung kombiniert `group_by()` mit `summarise()` anhand der Schlagstatistik von Lahman, um Mittelwerte, Summen, Streuungen, Anzahlen und Positionswerte รผber 104,324 Beobachtungen zu berechnen.

  • ๐Ÿงฎ Kernverb: summarise(df, name = function(column)) gibt eine Zeile zurรผck, und group_by() wandelt diese zuerst in eine Zeile pro Gruppe um.
  • ๐Ÿ“Š Statistikfamilien: Mittelwert und Median beschreiben das Zentrum, Standardabweichung und Interquartilsabstand beschreiben die Streuung, Minimum und Maximum beschreiben die Spannweite.
  • ๐Ÿ”ข Zรคhlen: n() zรคhlt die Zeilen in der aktuellen Gruppe und n_distinct() zรคhlt die eindeutigen Werte innerhalb dieser Gruppe.
  • ๐Ÿ“ Positionelle Helfer: first(), last() und nth() extraceine spezifische Beobachtung aus jeder Gruppe.
  • ๐Ÿ”„ Mehrspaltiges Arbeiten: Die Funktion across() wendet eine Funktion auf mehrere Spalten an, ohne den Code fรผr jede Spalte zu wiederholen.
  • ๐Ÿ”“ Grouping Hygiene: Rufen Sie immer ungroup() auf, bevor Sie eine Berechnung durchfรผhren, die erneut auf der gesamten Tabelle ausgefรผhrt werden muss.

R-Aggregatfunktion

In diesem Tutorial verwendeter Datensatz

Die Zusammenfassung einer Variablen vermittelt einen ersten Eindruck der Daten, wรคhrend die Zusammenfassung nach Gruppen wesentlich mehr รผber die Verteilung der Werte aussagt. Dieses Tutorial zeigt, wie man mit der dplyr-Bibliothek einen Datensatz nach Gruppen aggregiert.

Dieses Tutorial verwendet den Lahman-Schlagdatensatz. Nach dem Importieren und Speichernping Abgesehen von den neun unten aufgefรผhrten Spalten enthรคlt der Arbeitsdatenrahmen 104,324 Beobachtungen und 9 Variablen:

  • Spieler-ID: Spieler-ID-Code. Faktor
  • yearID: Jahr. Faktor
  • TeamID: Team. Faktor
  • lgID: Liga. Faktor: AA AL FL NL PL UA
  • AB: Bei Fledermรคusen. Numerisch
  • G: Spiele: Anzahl der Spiele eines Spielers. Numerisch
  • R: Lรคuft. Numerisch
  • HR: Homeruns. Numerisch
  • SH: Sacrifice trifft. Numerisch

Bevor Sie eine Zusammenfassung durchfรผhren, fรผhren Sie die folgenden Schritte aus, um die Daten vorzubereiten:

  • Schritt 1: Importieren Sie die Daten
  • Schritt 2: Wรคhlen Sie die relevanten Variablen aus
  • Schritt 3: Sortieren Sie die Daten
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)

Eine gute Vorgehensweise beim Importieren eines Datensatzes besteht darin, die Funktion glimpse() zu verwenden, um eine Vorstellung von der Struktur des Datensatzes zu erhalten.

# Structure of the data
glimpse(data)

Ausgang:

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, ...

zusammenfassen()

Die Syntax von summarise() ist einfach und konsistent mit den anderen in der dplyr-Bibliothek enthaltenen Verben.

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

Schauen Sie sich den folgenden Code an:

summarise(data, mean_run =mean(R))

Code Erlรคuterung

  • summarise(data, mean_run = mean(R)): Erstellt eine Variable mit dem Namen mean_run, die den Durchschnitt des Spaltenlaufs aus den Datensatzdaten darstellt.

Ausgang:

##   mean_run
## 1 19.20114

Sie kรถnnen so viele Variablen hinzufรผgen, wie Sie mรถchten. Sie erhalten die durchschnittliche Anzahl gespielter Spiele und die durchschnittlichen Opfertreffer.

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

Code Erlรคuterung

  • mean_SH = mean(SH, na.rm = TRUE): Fassen Sie eine zweite Variable zusammen. Sie setzen na.rm = TRUE, weil die Spalte SH fehlende Beobachtungen enthรคlt.

Ausgang:

##   mean_games  mean_SH
## 1   51.98361 2.340085

group_by() vs Kein group_by()

Allein verwendet, fasst `summarise()` den gesamten Datenrahmen in einer einzigen Zeile zusammen, wie die obigen Beispiele zeigen. Seine wahre Stรคrke offenbart sich jedoch erst in Kombination mit `group_by()`: dplyr Die Bibliothek wendet dann die gleiche Berechnung separat auf jede Gruppe an und gibt pro Gruppe eine Zeile zurรผck.

Beachten Sie, dass group_by perfekt mit allen anderen Verben funktioniert (z. B. mutate(), filter(), array(), โ€ฆ).

Es ist praktisch, den Pipeline-Operator zu verwenden, wenn Sie mehr als einen Schritt haben. Sie kรถnnen den durchschnittlichen Homerun pro Baseball-Liga berechnen.

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

Code Erlรคuterung

  • Daten: Datensatz, der zum Erstellen der zusammenfassenden Statistik verwendet wird
  • group_by(lgID): Die Daten werden vor der Zusammenfassung anhand der Werte von lgID aufgeteilt.
  • summarise(mean_run = mean(HR)): Berechnen Sie den durchschnittlichen Homerun

Ausgang:

## 
# 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	

Die Pipe funktioniert auch mit ggplot(), sodass die gesamte Kette von den Rohdaten bis zum fertigen Diagramm in einer einzigen Anweisung verbleibt. Der folgende Code kombiniert group_by(), summarise() und ggplot(), um die durchschnittlichen Home Runs pro Liga als Balkendiagramm darzustellen.

Sie fรผhren den folgenden Schritt aus:

  • Schritt 1: Datenrahmen auswรคhlen
  • Schritt 2: Daten gruppieren
  • Schritt 3: Daten zusammenfassen
  • Schritt 4: Zeichnen Sie die zusammenfassenden Statistiken auf
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()"
        )
    )

Ausgang:

Group_by Beispiel mit Summarise

Funktionen, die Sie innerhalb von summarise() verwenden kรถnnen

Das Verb summarise() ist mit fast allen Funktionen in R kompatibel. Hier ist eine kurze Liste nรผtzlicher Funktionen, die Sie zusammen mit summarise() verwenden kรถnnen:

Ziel Funktion Beschreibung
Plug-and-Play-Betrieb bedeuten() Durchschnitt des Vektors x
Median() Median des Vektors x
Summe() Summe von Vektor x
Variation SD() Standardabweichung des Vektors x
IQR() Interquartil des Vektors x
Abdeckung min () Minimum des Vektors x
max () Maximum des Vektors x
Quantil() Quantil des Vektors x
Position zuerst() Verwendung mit group_by() Erste Beobachtung der Gruppe
zuletzt() Verwendung mit group_by(). Letzte Beobachtung der Gruppe
nth() Verwendung mit group_by(). n. Beobachtung der Gruppe
Zu Zรคhlen n () Verwendung mit group_by(). Zรคhlen Sie die Anzahl der Zeilen
n_distinct() Verwendung mit group_by(). Zรคhlen Sie die Anzahl der eindeutigen Beobachtungen

In den folgenden Abschnitten wird fรผr jede Funktion in der obigen Tabelle ein Beispiel erlรคutert. Wenn Sie mit der Pipe und den anderen Verben noch nicht vertraut sind, beginnen Sie mit dem Abschnitt โ€žPipeโ€œ. Tutorial zum Auswรคhlen, Filtern und Anordnen.

Grundfunktion

Im vorherigen Beispiel haben Sie die Zusammenfassungsstatistik nicht in einem Datenrahmen gespeichert.

Aus einer Zusammenfassung kรถnnen Sie in zwei Schritten einen Datenrahmen erstellen:

  • Schritt 1: Speichern Sie den Datenrahmen zur weiteren Verwendung
  • Schritt 2: Verwenden Sie den Datensatz, um ein Liniendiagramm zu erstellen

Schritt 1) Sie berechnen die durchschnittliche Anzahl der pro Jahr gespielten Spiele.

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

Code Erlรคuterung

  • Die zusammenfassende Statistik des Schlagdatensatzes wird im Datenrahmen ex1 gespeichert.

Ausgang:

## # 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	

Schritt 2) Sie zeigen die zusammenfassende Statistik mit einem Liniendiagramm an und sehen den 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"
        )
    )

Ausgang:

Beispiel fรผr eine Grundfunktion

Untereinstellung

Die Funktion summarise() ist mit der Untergruppenbildung kompatibel.

## 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 Erlรคuterung

  • median_at_bat_league_no_zero = median(AB[AB > 0]): Die Variable AB enthรคlt viele 0. Sie kรถnnen den Median der vergleichen Eine Fledermaus Variable mit und ohne 0.

Ausgang:

## # 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	

Sum

Eine weitere nรผtzliche Funktion zum Aggregieren der Variablen ist sum().

Sie kรถnnen รผberprรผfen, welche Ligen die meisten Homeruns haben.

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

Ausgang:

## # 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	

Standardabweichung

Die Streuung der Daten wird mit der Standardabweichung oder sd() in R berechnet.

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

Ausgang:

## # 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		

Die Streuung der Home Runs variiert stark zwischen den Teams, und ALT gibt NA zurรผck, da dieses Team nur eine Zeile hat, sodass keine Standardabweichung berechnet werden kann.

Minimum und Maximum

Mit den Funktionen min() und max() kรถnnen Sie auf das Minimum und das Maximum eines Vektors zugreifen.

Der folgende Code gibt die niedrigste und hรถchste Anzahl von Spielen zurรผck, die ein Spieler in einer Saison gespielt hat.

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

Ausgang:

## # 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

Zu Zรคhlen

Es lohnt sich immer, die Beobachtungen pro Gruppe zu zรคhlen. In R gibt die Funktion `n()` die Anzahl der Zeilen in der aktuellen Gruppe zurรผck.

Der folgende Code berechnet beispielsweise die Anzahl der von jedem Spieler gespielten Jahre.

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

Ausgang:

## # 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

Erstes und Letztes

Sie kรถnnen die erste, letzte oder n-te Position einer Gruppe auswรคhlen.

Sie kรถnnen beispielsweise das erste und letzte Jahr jedes Spielers finden.

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

Ausgang:

## # 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

n-te Beobachtung

Die Funktion nth() ergรคnzt first() und last(). Sie gibt die Beobachtung an dem von Ihnen angegebenen Index innerhalb jeder Gruppe zurรผck.

Sie kรถnnen beispielsweise nur das zweite Jahr filtern, in dem eine Mannschaft gespielt hat.

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

Ausgang:

## # 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

Unterschiedliche Anzahl von Beobachtungen

Die Funktion `n()` gibt die Anzahl der Zeilen in der aktuellen Gruppe zurรผck. Die zugehรถrige Funktion `n_distinct()` zรคhlt hingegen eindeutige Werte.

Im nรคchsten Beispiel addieren Sie die Gesamtzahl der Spieler, die eine Mannschaft in allen Zeitrรคumen rekrutiert hat.

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

Code Erlรคuterung

  • group_by(teamID): Nach Team gruppieren
  • zusammenfassen(Anzahl_Spieler = n_distinct(Spieler-ID): Zรคhle die verschiedenen Spieler pro Team
  • array(desc(number_player)): Sortieren Sie die Daten nach der Anzahl der Spieler

Ausgang:

## # 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

Mehrere Gruppen

Eine zusammenfassende Statistik kann รผber mehrere Gruppen hinweg erstellt werden.

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

Code Erlรคuterung

  • group_by(yearID, teamID): Nach Jahr gruppieren und Team
  • summarise(mean_games = mean(G)): Durchschnittliche Anzahl der gespielten Spiele
  • array(desc(teamID, yearID)): Sortieren Sie die Daten nach Team und Jahr

Ausgang:

## # 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

Bevor Sie eine Operation durchfรผhren, kรถnnen Sie den Datensatz filtern. Der Datensatz beginnt im Jahr 1871, und die Jahre vor 1980 werden fรผr die Analyse nicht benรถtigt.

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

Code Erlรคuterung

  • filter(yearID > 1980): Filtern Sie die Daten, um nur die relevanten Jahre anzuzeigen (z. B. nach 1980).
  • group_by(yearID): Nach Jahr gruppieren
  • summarise(mean_game_year = mean(G)): Fassen Sie die Daten zusammen

Ausgang:

## # 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

Ungroup

SchlieรŸlich mรผssen Sie die Gruppierung entfernen.ping Bevor die Ebene geรคndert wird, auf der eine Berechnung ausgefรผhrt wird. Ohne ungroup() wรผrde die zweite summarise()-Funktion weiterhin pro Spieler ausgefรผhrt werden.

# 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 Erlรคuterung

  • filter(HR >0): Null-Homerun ausschlieรŸen
  • group_by(playerID): nach Spieler gruppieren
  • zusammenfassen(durchschnittliche_HR_Spiel = Summe(HR)/Summe(G)): Durchschnittlichen Homerun pro Spieler berechnen
  • ungroup(): Entfernt die Gruppierungping
  • summarise(total_average_homerun = mean(average_HR_game)): Fassen Sie die Daten zusammen

Ausgang:

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

Wie man mehrere Spalten mit across() zusammenfasst

In den obigen Beispielen wird jeweils eine Spalte einzeln aufgefรผhrt. Wird dieselbe Statistik fรผr mehrere Spalten benรถtigt, wendet die Funktion `cross()` sie mit einem einzigen Aufruf auf alle Spalten an.

# 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)))

Drei Argumente bestimmen das Verhalten:

  • .cols: die Spalten, auf die reagiert werden soll, geschrieben mit denselben Hilfsfunktionen wie select(), einschlieรŸlich where(is.numeric).
  • .fns: eine Funktion oder eine benannte Liste von Funktionen, die auf jede Spalte angewendet werden sollen.
  • .names: das Namensmuster fรผr die Ausgabe, wobei {.col} die Spalte und {.fn} der Funktionsname ist.

Die Funktion `cross()` hat in dplyr 1.0.0 die รคlteren Hilfsfunktionen `summarise_all()`, `summarise_at()` und `summarise_if()` ersetzt. Diese funktionieren zwar noch, sind aber veraltet, daher sollte neuer Code `cross()` verwenden.

Hรคufige Fehler bei der Verwendung von summarise() und wie man sie behebt

Vier Probleme sind fรผr die meisten fehlgeschlagenen Aggregationen verantwortlich.

  • Das Ergebnis ist NA. Die Funktionen `mean()` und `sum()` geben `NA` zurรผck, wenn ein Wert fehlt. Fรผgen Sie `na.rm = TRUE` hinzu, wie es im obigen Beispiel mit `mean_SH` der Fall ist.
  • Die Meldung โ€žsummarise() hat gruppierte Ausgabeโ€œ wird angezeigt. Grouping Die Gruppierung nach zwei Variablen fรผhrt dazu, dass das Ergebnis nach der ersten Variable gruppiert wird. Mit `.groups = "drop"` wird die Gruppierung entfernt.pingoder rufen Sie anschlieรŸend ungroup() auf.
  • Eine spรคtere Berechnung ergibt den falschen Wert. Ein Dataframe bleibt gruppiert, bis man die Gruppierung aufhebt; daher wird fรผr jede Gruppe weiterhin ein zweites `summarise()` ausgefรผhrt. Genau das demonstriert das Beispiel mit `ungroup()`.
  • Die Ausgabe enthรคlt mehr Zeilen als erwartet. summarise() gibt eine Zeile pro Gruppe zurรผck, sodass eine unbeabsichtigte Gruppe entsteht.ping Die Variable multipliziert die Ausgabe. รœberprรผfen Sie die Zeile โ€žGroups:โ€œ, die รผber einem beliebigen Tibble ausgegeben wird.
# Drop the grouping as part of the call
data %>%
    group_by(yearID, teamID) %>%
    summarise(mean_games = mean(G), .groups = "drop")

summarise() in R: Funktionsreferenz

Um eine Zusammenfassung nach Gruppen zu erhalten, teilen Sie die Daten zuerst auf:

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

und entfernen Sie die Masseping wenn sich die Berechnungsebene รคndert:

ungroup(df)

Die folgende Tabelle listet alle Funktionen auf, die in diesem Tutorial mit summarise() verwendet werden:

Methodik Funktion Code
bedeuten bedeuten
summarise(df, mean_x1 = mean(x1))
mittlere mittlere
summarise(df, median_x1 = median(x1))
Summe Summe
summarise(df, sum_x1 = sum(x1))
Standardabweichung sd
summarise(df, sd_x1 = sd(x1))
Interquartil IQR
summarise(df, interquartile_x1 = IQR(x1))
Minimum min
summarise(df, minimum_x1 = min(x1))
maximal max
summarise(df, maximum_x1 = max(x1))
Quantil Quantil
summarise(df, quantile_x1 = quantile(x1, probs = 0.75))
erste Beobachtung zuerst
summarise(df, first_x1 = first(x1))
letzte Beobachtung letzte
summarise(df, last_x1 = last(x1))
n-te Beobachtung nth
summarise(df, nth_x1 = nth(x1, 2))
Anzahl des Vorkommens n
summarise(df, n_x1 = n())
Anzahl unterschiedlicher Vorkommnisse n_distinct
summarise(df, n_distinct_x1 = n_distinct(x1))

Hรคufig gestellte Fragen

Die Funktion `summarise()` fasst jede Gruppe zu einer einzelnen Statistikzeile zusammen. Die Funktion `mutate()` behรคlt alle Zeilen bei und fรผgt eine neue Spalte hinzu. Verwenden Sie `mutate()`, wenn die Gruppenstatistik zusammen mit den ursprรผnglichen Beobachtungen angezeigt werden soll.

Grouping Die Verwendung von zwei oder mehr Variablen fรผhrt dazu, dass das Ergebnis nach allen Variablen auรŸer der letzten gruppiert wird. dplyr warnt Sie, da nachfolgende Befehle stillschweigend pro Gruppe ausgefรผhrt wรผrden. Verwenden Sie `.groups = "drop"`, um dies zu vermeiden.

n() zรคhlt alle Zeilen der aktuellen Gruppe, einschlieรŸlich Wiederholungen. n_distinct() zรคhlt eindeutige Werte in einer Spalte. Um die Spieler pro Team zu zรคhlen, ist n_distinct() erforderlich, da ein Spieler in mehreren Saisons vorkommt.

Gruppenbezogene Aggregatwerte wie Kundendurchschnitte, Anzahl und Aktualitรคtswerte zรคhlen zu den stรคrksten Prรคdiktoren in tabellarischen KI-Modellen. Die Verwendung von `group_by()` in Kombination mit `summarise()` ist die Standardmethode, um diese reproduzierbar zu erstellen.

Ja. KI-Assistenten kรถnnen `aggregate()` und `tapply()` in `group_by()`- und `summarise()`-Pipelines umschreiben. Vergleichen Sie die Zeilenanzahlen beider Versionen, da das Basis-R und dplyr fehlende Gruppen unterschiedlich behandeln.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: