R Aggregatiefunctie: samenvatten & Group_by () Voorbeeld

Inhoudsopgave:

Anonim

Samenvatting van een variabele is belangrijk om een ​​idee te hebben over de gegevens. Hoewel het samenvatten van een variabele per groep betere informatie geeft over de verdeling van de gegevens.

In deze tutorial leert u hoe u een dataset per groep samenvat met de dplyr-bibliotheek.

In deze tutorial leer je

  • Samenvatten()
  • Group_by vs geen group_by
  • Functie samengevat ()
  • Basis functie
  • Subsetting
  • Som
  • Standaardafwijking
  • Minimum en maximum
  • Tellen
  • Eerste en laatste
  • nde observatie
  • Meerdere groepen
  • Filter
  • Degroeperen

Voor deze tutorial gebruik je de batting-gegevensset. De originele dataset bevat 102816 waarnemingen en 22 variabelen. U gebruikt slechts 20 procent van deze dataset en gebruikt de volgende variabelen:

  • playerID: Speler-ID-code. Factor
  • yearID: Jaar. Factor
  • teamID: Team. factor
  • lgID: Competitie. Factor: AA AL FL NL PL UA
  • AB: Slagbeurten. Numeriek
  • G: Games: aantal games door een speler. Numeriek
  • R: loopt. Numeriek
  • HR: Homeruns. Numeriek
  • SH: Offerhits. 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 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)

Een goede gewoonte bij het importeren van een dataset is om de functie glimpse () te gebruiken om een ​​idee te krijgen over de structuur van de dataset.

# Structure of the dataglimpse(data)

Uitgang:

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

Samenvatten()

De syntaxis van summarize () 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 Verklaring

  • summarize (data, mean_run = mean (R)): Creëert een variabele met de naam mean_run die het gemiddelde is van de kolom die wordt uitgevoerd op basis van de gegevenssetgegevens.

Uitgang:

## mean_run## 1 19.20114

U kunt zoveel variabelen toevoegen als u wilt. U geeft de gemiddeld gespeelde games en de gemiddelde opofferingshits terug.

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

Code Verklaring

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

Uitgang:

## mean_games mean_SH## 1 51.98361 2.340085 

Group_by vs geen group_by

De functie summerise () zonder group_by () slaat nergens op. Het creëert samenvattende statistieken per groep. De bibliotheek dplyr past automatisch een functie toe op de groep die je bent gepasseerd binnen het werkwoord group_by.

Merk op dat group_by perfect werkt met alle andere werkwoorden (dwz mutate (), filter (), schikken (),…).

Het is handig om de pijplijnoperator te gebruiken als u meer dan één stap heeft. Je kunt de gemiddelde homerun berekenen per honkbalcompetitie.

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

Code Verklaring

  • data: Dataset die wordt gebruikt om de samenvattende statistieken te construeren
  • group_by (lgID): Bereken de samenvatting door de variabele `lgID
  • samenvatten (mean_run = mean (HR)): Bereken de gemiddelde homerun

Uitgang:

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

De pipe-operator werkt ook met ggplot (). U kunt de samenvattende statistiek eenvoudig weergeven met een grafiek. Alle stappen worden in de pijpleiding geduwd totdat de grap is geplot. Het lijkt visueler om de gemiddelde homerun per competitie te zien met een bar char. De onderstaande code demonstreert de kracht van het combineren van group_by (), summarize () en ggplot () samen.

U voert de volgende stap uit:

  • Stap 1: Selecteer dataframe
  • Stap 2: Groepeer gegevens
  • Stap 3: vat de gegevens samen
  • Stap 4: Teken de samenvattende statistieken
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()"))

Uitgang:

Functie samengevat ()

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

Objectief Functie Omschrijving
Basic gemeen() Gemiddelde van vector x
mediaan() Mediaan van vector x
som() Som van vector x
variatie sd () standaarddeviatie van vector x
IQR () Interkwartiel van vector x
Bereik min () Minimaal vector x
max () Maximaal vector x
kwantiel () Kwantiel van vector x
Positie eerste() Gebruiken met group_by () Eerste observatie van de groep
laatste() Gebruiken met group_by (). Laatste observatie van de groep
nde () Gebruik met group_by (). nde observatie van de groep
Tellen n () Gebruik met group_by (). Tel het aantal rijen
n_distinct () Gebruiken met group_by (). Tel het aantal verschillende waarnemingen

We zullen voorbeelden zien voor elke functie van tabel 1.

Basis functie

In het vorige voorbeeld heb je de samenvattende statistiek niet in een dataframe opgeslagen.

U kunt in twee stappen doorgaan om een ​​datumframe te genereren op basis van een samenvatting:

  • Stap 1: Bewaar het dataframe voor verder gebruik
  • Stap 2: Gebruik de dataset om een ​​lijnplot te maken

Stap 1) U berekent het gemiddelde aantal gespeelde spellen per jaar.

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

Code Verklaring

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

Uitgang:

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

Stap 2) U toont de samenvattende statistiek met een lijndiagram en ziet de 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"))

Uitgang:

Subsetting

De functie summarize () is compatibel met subsetting.

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

  • median_at_bat_league_no_zero = median (AB [AB> 0]): De variabele AB bevat veel 0. Je kunt de mediaan van de slagbeurtvariabele vergelijken met en zonder 0.

Uitgang:

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

Som

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

U kunt zien welke competities de meeste homeruns hebben.

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

Uitgang:

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

Standaardafwijking

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

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

Uitgang:

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

Er is veel ongelijkheid in de hoeveelheid homerun die door elk team wordt gedaan.

Minimum en maximum

U krijgt toegang tot het minimum en het maximum van een vector met de functie min () en max ().

De onderstaande code retourneert het laagste en hoogste aantal games in een seizoen dat door een speler wordt gespeeld.

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

Uitgang:

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

Tellen

Waarnemingen per groep tellen is altijd een goed idee. Met R kunt u het aantal keren dat voorkomen wordt geaggregeerd met n ().

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

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

Uitgang:

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

Eerste en laatste

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

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

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

Uitgang:

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

nde observatie

De functie nth () is complementair aan first () en last (). Je hebt toegang tot de zoveelste waarneming binnen een groep met de index om terug te keren.

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

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

Uitgang:

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

Onderscheidend aantal waarnemingen

De functie n () geeft het aantal waarnemingen in een huidige groep terug. Een gesloten functie voor n () is n_distinct (), die het aantal unieke waarden telt.

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

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

Code Verklaring

  • group_by (teamID): groeperen op jaar en team
  • samenvatten ( number_player = n_distinct (playerID)): Tel het duidelijke aantal spelers per team
  • arrang (desc (number_player)): Sorteer de gegevens op het aantal spelers

Uitgang:

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

Meerdere groepen

Een samenvattende statistiek kan worden gerealiseerd over meerdere groepen.

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

Code Verklaring

  • group_by (yearID, teamID): groeperen op jaar en team
  • summarize (mean_games = mean (G)): vat het aantal spelers samen
  • arrangement (desc (teamID, yearID)): Sorteer de gegevens op team en jaar

Uitgang:

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

Voordat u een bewerking gaat uitvoeren, kunt u de gegevensset filteren. De dataset begint in 1871 en de analyse heeft de jaren vóór 1980 niet nodig.

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

Code Verklaring

  • filter (yearID> 1980): Filter de gegevens om alleen de relevante jaren weer te geven (dwz na 1980)
  • group_by (yearID): groeperen op jaar
  • summarize (mean_game_year = mean (G)): vat de gegevens samen

Uitgang:

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

Degroeperen

Last but not least moet u de groepering verwijderen voordat u het niveau van de berekening wilt wijzigen.

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

  • filter (HR> 0): nul homerun uitsluiten
  • group_by (playerID): groep op speler
  • samenvatten (gemiddelde_HR_spel = som (HR) / som (G)): Bereken de gemiddelde homerun per speler
  • ungroup (): verwijder de groepering
  • summarize (total_average_homerun = mean (average_HR_game)): vat de gegevens samen

Uitgang:

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

Overzicht

Als u een samenvatting per groep wilt retourneren, kunt u gebruik maken van:

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

u moet de gegevens opheffen met:

ungroup(df) 

De onderstaande tabel geeft een overzicht van de functie die u hebt geleerd met summarize ()

methode

functie

code

gemeen

gemeen

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

IQR

summarise(df,interquartile_x1 = IQR(x1))

minimum

min

summarise(df,minimum_x1 = min(x1))

maximum

max. hoogte

summarise(df,maximum_x1 = max(x1))

kwantiel

kwantiel

summarise(df,quantile_x1 = quantile(x1))

eerste observatie

eerste

summarise(df,first_x1 = first(x1))

laatste opmerking

laatste

summarise(df,last_x1 = last(x1))

nde observatie

n

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

aantal keren voorkomen

n

summarise(df,n_x1 = n(x1))

aantal verschillende keren voorkomen

n_distinct

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