R Aggregatfunktion: Zusammenfassen & Group_by () Beispiel

Inhaltsverzeichnis:

Anonim

Die Zusammenfassung einer Variablen ist wichtig, um eine Vorstellung von den Daten zu haben. Die Zusammenfassung einer Variablen nach Gruppen liefert jedoch bessere Informationen über die Verteilung der Daten.

In diesem Tutorial erfahren Sie, wie Sie einen Datensatz nach Gruppen mit der dplyr-Bibliothek zusammenfassen.

In diesem Tutorial lernen Sie

  • Zusammenfassen()
  • Group_by vs no group_by
  • Funktion in summarize ()
  • Grundfunktion
  • Teilmenge
  • Summe
  • Standardabweichung
  • Minimum und Maximum
  • Anzahl
  • Erstes und Letztes
  • n-te Beobachtung
  • Mehrere Gruppen
  • Filter
  • Gruppierung aufheben

Für dieses Tutorial verwenden Sie den Batting-Datensatz. Der ursprüngliche Datensatz enthält 102816 Beobachtungen und 22 Variablen. Sie werden nur 20 Prozent dieses Datensatzes verwenden und die folgenden Variablen verwenden:

  • playerID: 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: Opfertreffer. 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 1data <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/lahman-batting.csv") %> %# Step 2select(c(playerID, yearID, AB, teamID, lgID, G, R, HR, SH)) %> %# Step 3arrange(playerID, teamID, yearID)

Wenn Sie ein Dataset importieren, empfiehlt es sich, mit der Funktion glimpse () eine Vorstellung von der Struktur des Datasets zu erhalten.

# Structure of the dataglimpse(data)

Ausgabe:

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

Zusammenfassen()

Die Syntax von summize () ist grundlegend und stimmt mit den anderen in der dplyr-Bibliothek enthaltenen Verben überein.

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 Erklärung

  • Zusammenfassung (Daten, Mittelwert_Run = Mittelwert (R)): Erstellt eine Variable mit dem Namen Mittelwert_Run, die den Durchschnitt der aus den Datensatzdaten ausgeführten Spalte darstellt.

Ausgabe:

## mean_run## 1 19.20114

Sie können beliebig viele Variablen hinzufügen. Sie geben die durchschnittlich gespielten Spiele und die durchschnittlichen Opfertreffer zurück.

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

Code Erklärung

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

Ausgabe:

## mean_games mean_SH## 1 51.98361 2.340085 

Group_by vs no group_by

Die Funktion summerise () ohne group_by () macht keinen Sinn. Es wird eine zusammenfassende Statistik nach Gruppen erstellt. Die Bibliothek dplyr wendet automatisch eine Funktion auf die Gruppe an, die Sie innerhalb des Verbs group_by übergeben haben.

Beachten Sie, dass group_by perfekt mit allen anderen Verben zusammenarbeitet (z. B. mutate (), filter (), arrangieren (),…).

Es ist praktisch, den Pipeline-Operator zu verwenden, wenn Sie mehr als einen Schritt haben. Sie können den durchschnittlichen Homerun nach Baseballliga berechnen.

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

Code Erklärung

  • Daten: Datensatz, der zum Erstellen der Zusammenfassungsstatistik verwendet wird
  • group_by (lgID): Berechnen Sie die Zusammenfassung, indem Sie die Variable `lgID gruppieren
  • zusammenfassen (mean_run = mean (HR)): Berechnen Sie den durchschnittlichen Homerun

Ausgabe:

### A tibble: 7 x 2## lgID mean_run##  ## 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  0.2867133

Der Pipe-Operator arbeitet auch mit ggplot (). Sie können die Zusammenfassungsstatistik einfach mit einem Diagramm anzeigen. Alle Schritte werden in die Pipeline geschoben, bis der Grap geplottet ist. Es scheint visueller zu sein, den durchschnittlichen Homerun nach Liga mit einem Balken zu sehen. Der folgende Code demonstriert die Fähigkeit, group_by (), summary () und ggplot () miteinander zu kombinieren.

Sie werden den folgenden Schritt ausführen:

  • Schritt 1: Datenrahmen auswählen
  • Schritt 2: Gruppendaten
  • Schritt 3: Fassen Sie die Daten zusammen
  • Schritt 4: Zeichnen Sie die zusammenfassende Statistik
library(ggplot2)# Step 1data % > %#Step 2group_by(lgID) % > %#Step 3summarise(mean_home_run = mean(HR)) % > %#Step 4ggplot(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()"))

Ausgabe:

Funktion in summarize ()

Das Verb summieren () ist mit fast allen Funktionen in R kompatibel. Hier ist eine kurze Liste nützlicher Funktionen, die Sie zusammen mit zusammenfassen () verwenden können:

Zielsetzung Funktion Beschreibung
Basic bedeuten() Durchschnitt des Vektors x
Median() Median des Vektors x
Summe() Summe des Vektors x
Variation sd () Standardabweichung des Vektors x
IQR () Interquartil des Vektors x
Reichweite Mindest() Minimum des Vektors x
max () Maximum des Vektors x
Quantil () Quantil des Vektors x
Position zuerst() Verwendung mit group_by () Erste Beobachtung der Gruppe
letzte() Verwenden Sie mit group_by (). Letzte Beobachtung der Gruppe
n-te () Verwenden Sie mit group_by (). n-te Beobachtung der Gruppe
Anzahl n () Verwenden Sie mit group_by (). Zählen Sie die Anzahl der Zeilen
n_distinct () Verwenden Sie mit group_by (). Zählen Sie die Anzahl der unterschiedlichen Beobachtungen

Wir werden Beispiele für alle Funktionen von Tabelle 1 sehen.

Grundfunktion

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

Sie können in zwei Schritten einen Datumsrahmen aus einer Zusammenfassung 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.

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

Code Erklärung

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

Ausgabe:

## # A tibble: 6 x 2## yearID mean_game_year##  ## 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 und sehen den Trend.

# Plot the graphggplot(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"))

Ausgabe:

Teilmenge

Die Funktion summate () ist mit der Teilmenge kompatibel.

## Subsetting + Mediandata % > %group_by(lgID) % > %summarise(median_at_bat_league = median(AB),#Compute the median without the zeromedian_at_bat_league_no_zero = median(AB[AB > 0]))

Code Erklärung

  • median_at_bat_league_no_zero = median (AB [AB> 0]): Die Variable AB enthält viele 0. Sie können den Median der at bat- Variablen mit und ohne 0 vergleichen.

Ausgabe:

## # A tibble: 7 x 3## lgID median_at_bat_league median_at_bat_league_no_zero##   ## 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  101 101

Summe

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

Sie können überprüfen, welche Ligen mehr Homeruns haben.

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

Ausgabe:

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

Standardabweichung

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

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

Ausgabe:

## # A tibble: 148 x 2## teamID sd_at_bat_league##  ## 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

Es gibt viele Ungleichheiten in der Anzahl der Homeruns, die von jedem Team durchgeführt werden.

Minimum und Maximum

Mit der Funktion 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 in einer von einem Spieler gespielten Saison zurück.

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

Ausgabe:

## # A tibble: 10,395 x 3## playerID min_G max_G##  ## 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

Anzahl

Beobachtungen nach Gruppen zu zählen ist immer eine gute Idee. Mit R können Sie die Anzahl der Vorkommen mit n () aggregieren.

Der folgende Code berechnet beispielsweise die Anzahl der Jahre, die jeder Spieler gespielt hat.

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

Ausgabe:

## # A tibble: 10,395 x 2## playerID number_year##  ## 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.

Zum Beispiel können Sie das erste und letzte Jahr jedes Spielers finden.

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

Ausgabe:

## # A tibble: 10,395 x 3## playerID first_appearance last_appearance##   ## 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 () ist komplementär zu first () und last (). Sie können auf die n-te Beobachtung innerhalb einer Gruppe mit dem zurückzugebenden Index zugreifen.

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

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

Ausgabe:

## # A tibble: 148 x 2## teamID second_game##  ## 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

Deutliche Anzahl von Beobachtungen

Die Funktion n () gibt die Anzahl der Beobachtungen in einer aktuellen Gruppe zurück. Eine geschlossene Funktion für n () ist n_distinct (), die die Anzahl der eindeutigen Werte zählt.

Im nächsten Beispiel addieren Sie die Gesamtzahl der Spieler, die ein Team in allen Zeiträumen rekrutiert hat.

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

Code Erklärung

  • group_by (teamID): Gruppe nach Jahr und Team
  • zusammenfassen (number_player = n_distinct (playerID)): Zählen Sie die unterschiedliche Anzahl von Spielern pro Team
  • arrangieren (desc (number_player)): Sortieren Sie die Daten nach der Anzahl der Spieler

Ausgabe:

## # A tibble: 148 x 2## teamID number_player##  ## 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 zwischen mehreren Gruppen erstellt werden.

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

Code Erklärung

  • group_by (yearID, teamID): Gruppe nach Jahr und Team
  • zusammenfassen (mean_games = mean (G)): Fasst die Anzahl der Spieler zusammen
  • arrangieren (desc (teamID, yearID)): Sortieren Sie die Daten nach Team und Jahr

Ausgabe:

## # A tibble: 2,829 x 3## # Groups: yearID [146]## yearID teamID mean_games##   ## 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 ausführen möchten, können Sie das Dataset filtern. Der Datensatz beginnt im Jahr 1871 und die Analyse benötigt nicht die Jahre vor 1980.

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

Code Erklärung

  • filter (yearID> 1980): Filtern Sie die Daten so, dass nur die relevanten Jahre angezeigt werden (dh nach 1980).
  • group_by (yearID): Gruppe nach Jahr
  • zusammenfassen (mean_game_year = mean (G)): Fassen Sie die Daten zusammen

Ausgabe:

## # A tibble: 36 x 2## yearID mean_game_year##  ## 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

Gruppierung aufheben

Zu guter Letzt müssen Sie die Gruppierung entfernen, bevor Sie die Berechnungsebene ändern möchten.

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

Code Erklärung

  • Filter (HR> 0): Null-Homerun ausschließen
  • group_by (playerID): Gruppe für Spieler
  • Zusammenfassung (Average_HR_game = Summe (HR) / Summe (G)): Berechnet den durchschnittlichen Homerun des Spielers
  • Gruppierung aufheben (): Gruppierung entfernen
  • zusammenfassen (total_average_homerun = mean (durchschnittliches_HR_spiel)): Fassen Sie die Daten zusammen

Ausgabe:

## # A tibble: 1 x 1## total_average_homerun## ## 1 0.06882226

Zusammenfassung

Wenn Sie eine Zusammenfassung nach Gruppen zurückgeben möchten, können Sie Folgendes verwenden:

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

Sie müssen die Gruppierung der Daten aufheben mit:

ungroup(df) 

Die folgende Tabelle fasst die Funktion zusammen, die Sie mit summarize () gelernt haben.

Methode

Funktion

Code

bedeuten

bedeuten

summarise(df,mean_x1 = mean(x1))

Median

Median

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

Mindest

summarise(df,minimum_x1 = min(x1))

maximal

max

summarise(df,maximum_x1 = max(x1))

Quantil

Quantil

summarise(df,quantile_x1 = quantile(x1))

erste Beobachtung

zuerst

summarise(df,first_x1 = first(x1))

letzte Beobachtung

letzte

summarise(df,last_x1 = last(x1))

n-te Beobachtung

n

summarise(df,nth_x1 = nth(x1, 2))

Anzahl der Vorkommen

n

summarise(df,n_x1 = n(x1))

Anzahl der unterschiedlichen Vorkommen

n_distinct

summarise(df,n_distinct _x1 = n_distinct(x1))