Rezumatul unei variabile este important pentru a avea o idee despre date. Deși, rezumând o variabilă pe grupuri, se oferă informații mai bune despre distribuția datelor.
În acest tutorial, veți afla cum să rezumați un set de date pe grupuri cu biblioteca dplyr.
În acest tutorial, veți învăța
- Rezuma()
- Group_by vs no group_by
- Funcția în resume ()
- Functie de bază
- Subsetare
- Sumă
- Deviație standard
- Minim și maxim
- Numara
- Primul si ultimul
- a n-a observație
- Mai multe grupuri
- Filtru
- Dezgrupează
Pentru acest tutorial, veți utiliza setul de date pentru bătăi. Setul de date original conține 102816 observații și 22 de variabile. Veți utiliza doar 20% din acest set de date și veți utiliza următoarele variabile:
- playerID: cod ID jucător. Factor
- yearID: An. Factor
- teamID: Echipa. factor
- lgID: Liga. Factor: AA AL FL NL PL UA
- AB: La lilieci. Numeric
- G: Jocuri: numărul de jocuri de către un jucător. Numeric
- R: Rulează. Numeric
- HR: Homeruns. Numeric
- SH: Lovituri de sacrificiu. Numeric
Înainte de a efectua rezumatul, veți efectua următorii pași pentru a pregăti datele:
- Pasul 1: Importați datele
- Pasul 2: Selectați variabilele relevante
- Pasul 3: Sortează datele
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)
O bună practică atunci când importați un set de date este să utilizați funcția glimpse () pentru a avea o idee despre structura setului de date.
# Structure of the dataglimpse(data)
Ieșire:
Observations: 104,324Variables: 9$ playerIDaardsda01, 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,…
Rezuma()
Sintaxa resume () este de bază și coerentă cu celelalte verbe incluse în biblioteca dplyr.
summarise(df, variable_name=condition)arguments:- `df`: Dataset used to construct the summary statistics- `variable_name=condition`: Formula to create the new variable
Uită-te la codul de mai jos:
summarise(data, mean_run =mean(R))
Explicarea codului
- resume (date, mean_run = mean (R)): Creează o variabilă denumită mean_run care este media coloanei rulate din datele setului de date.
Ieșire:
## mean_run## 1 19.20114
Puteți adăuga câte variabile doriți. Reveniți la jocurile medii jucate și la sacrificiul mediu.
summarise(data, mean_games = mean(G),mean_SH = mean(SH, na.rm = TRUE))
Explicarea codului
- mean_SH = medie (SH, na.rm = ADEVĂRAT): rezumați a doua variabilă. Setați na.rm = TRUE deoarece coloana SH conține observații lipsă.
Ieșire:
## mean_games mean_SH## 1 51.98361 2.340085
Group_by vs no group_by
Funcția summerise () fără group_by () nu are niciun sens. Se creează statistici sumare pe grup. Biblioteca dplyr aplică automat o funcție grupului pe care l-ați trecut în verbul group_by.
Rețineți că, group_by funcționează perfect cu toate celelalte verbe (adică mutare (), filtru (), aranjare (), ...).
Este convenabil să utilizați operatorul conductei atunci când aveți mai mult de un pas. Puteți calcula media homerunului în liga de baseball.
data % > %group_by(lgID) % > %summarise(mean_run = mean(HR))
Explicarea codului
- date: set de date utilizat pentru construirea statisticilor rezumative
- group_by (lgID): Calculați rezumatul grupând variabila `lgID
- resume (mean_run = mean (HR)): Calculați media homerun
Ieșire:
### 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
Operatorul de conducte funcționează și cu ggplot (). Puteți afișa cu ușurință statistica rezumativă cu un grafic. Toți pașii sunt împinși în interiorul conductei până când grapul este complotat. Pare mai vizual să vezi homerunul mediu pe ligă cu un bar. Codul de mai jos demonstrează puterea de a combina group_by (), resume () și ggplot () împreună.
Veți face următorul pas:
- Pasul 1: Selectați cadrul de date
- Pasul 2: date de grup
- Pasul 3: rezumați datele
- Pasul 4: Trageți statisticile rezumative
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()"))
Ieșire:
Funcția în resume ()
Verbul resume () este compatibil cu aproape toate funcțiile din R. Iată o listă scurtă de funcții utile pe care le puteți folosi împreună cu resume ():
Obiectiv | Funcţie | Descriere |
---|---|---|
De bază | Rău() | Media vectorului x |
median() | Mediana vectorului x | |
sumă() | Suma vectorului x | |
variație | sd () | deviația standard a vectorului x |
IQR () | Interquartile vectorului x | |
Gamă | min () | Minimul vectorului x |
max () | Maximul vectorului x | |
quantile () | Cantitatea vectorului x | |
Poziţie | primul() | Se folosește cu group_by () Prima observație a grupului |
ultimul() | Folosiți cu group_by (). Ultima observație a grupului | |
nth () | Folosiți cu group_by (). a n-a observare a grupului | |
Numara | n () | Folosiți cu group_by (). Numărați numărul de rânduri |
n_distinct () | Folosiți cu group_by (). Numărați numărul de observații distincte |
Vom vedea exemple pentru fiecare funcție a tabelului 1.
Functie de bază
În exemplul anterior, nu ați stocat statistica rezumativă într-un cadru de date.
Puteți continua în doi pași pentru a genera un cadru de date dintr-un rezumat:
- Pasul 1: Stocați cadrul de date pentru utilizare ulterioară
- Pasul 2: utilizați setul de date pentru a crea un grafic liniar
Pasul 1) Calculați numărul mediu de jocuri jucate pe an.
## Meanex1 <- data % > %group_by(yearID) % > %summarise(mean_game_year = mean(G))head(ex1)
Explicarea codului
- Statistica rezumativă a setului de date de batere este stocată în cadrul de date ex1.
Ieșire:
## # 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
Pasul 2) Afișați statistica rezumativă cu un grafic liniar și vedeți tendința.
# 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"))
Ieșire:
Subsetare
Funcția resume () este compatibilă cu subsetarea.
## 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]))
Explicarea codului
- median_at_bat_league_no_zero = median (AB [AB> 0]): Variabila AB conține o mulțime de 0. Puteți compara mediana variabilei at bat cu și fără 0.
Ieșire:
## # 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
Sumă
O altă funcție utilă pentru a agrega variabila este sum ().
Puteți verifica care ligi au mai mulți homeruns.
## Sumdata % > %group_by(lgID) % > %summarise(sum_homerun_league = sum(HR))
Ieșire:
## # 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
Deviație standard
Răspândirea în date este calculată cu deviația standard sau sd () în R.
# Spreaddata % > %group_by(teamID) % > %summarise(sd_at_bat_league = sd(HR))
Ieșire:
## # 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
Există o mulțime de inegalități în cantitatea de homerun făcută de fiecare echipă.
Minim și maxim
Puteți accesa minimul și maximul unui vector cu funcțiile min () și max ().
Codul de mai jos returnează cel mai mic și cel mai mare număr de jocuri dintr-un sezon jucat de un jucător.
# Min and maxdata % > %group_by(playerID) % > %summarise(min_G = min(G),max_G = max(G))
Ieșire:
## # 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
Numara
Numărul observațiilor pe grup este întotdeauna o idee bună. Cu R, puteți agrega numărul de apariții cu n ().
De exemplu, codul de mai jos calculează numărul de ani jucat de fiecare jucător.
# count observationsdata % > %group_by(playerID) % > %summarise(number_year = n()) % > %arrange(desc(number_year))
Ieșire:
## # 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
Primul si ultimul
Puteți selecta prima, ultima sau a n-a poziție a unui grup.
De exemplu, puteți găsi primul și ultimul an al fiecărui jucător.
# first and lastdata % > %group_by(playerID) % > %summarise(first_appearance = first(yearID),last_appearance = last(yearID))
Ieșire:
## # 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
a n-a observație
Funcția nth () este complementară cu first () și last (). Puteți accesa a n-a observație într-un grup cu indexul de returnat.
De exemplu, puteți filtra doar al doilea an în care a jucat o echipă.
# nthdata % > %group_by(teamID) % > %summarise(second_game = nth(yearID, 2)) % > %arrange(second_game)
Ieșire:
## # 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
Număr distinct de observație
Funcția n () returnează numărul de observații dintr-un grup curent. O funcție închisă la n () este n_distinct (), care numără numărul de valori unice.
În exemplul următor, adăugați numărul total de jucători recrutați de o echipă în toate perioadele.
# distinct valuesdata % > %group_by(teamID) % > %summarise(number_player = n_distinct(playerID)) % > %arrange(desc(number_player))
Explicarea codului
- group_by (teamID): Grup după an și echipă
- resume (number_player = n_distinct ( playerID )): Numărați numărul distinct de jucători pe echipe
- arrange (desc (number_player)): Sortează datele după numărul de jucători
Ieșire:
## # 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
Mai multe grupuri
O statistică sumară poate fi realizată între mai multe grupuri.
# Multiple groupsdata % > %group_by(yearID, teamID) % > %summarise(mean_games = mean(G)) % > %arrange(desc(teamID, yearID))
Explicarea codului
- group_by (ID an, ID echipă): grup după an și echipă
- resume (mean_games = mean (G)): rezumați numărul de jucători
- aranja (desc (ID echipă, ID an)): Sortează datele după echipă și an
Ieșire:
## # 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
Filtru
Înainte de a intenționa să efectuați o operațiune, puteți filtra setul de date. Setul de date începe în 1871, iar analiza nu are nevoie de anii anteriori anului 1980.
# Filterdata % > %filter(yearID > 1980) % > %group_by(yearID) % > %summarise(mean_game_year = mean(G))
Explicarea codului
- filter (ID an> 1980): filtrați datele pentru a afișa doar anii relevanți (adică după 1980)
- group_by (yearID): Grup după an
- resume (mean_game_year = mean (G)): rezumați datele
Ieșire:
## # 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
Dezgrupează
Nu în ultimul rând, trebuie să eliminați gruparea înainte de a dori să modificați nivelul de calcul.
# 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))
Explicarea codului
- filtru (HR> 0): excludeți zero homerun
- group_by (playerID): grup cu jucător
- resume (average_HR_game = sum (HR) / sum (G)): Calculați media homerunului de către jucător
- ungroup (): eliminați gruparea
- resume (total_average_homerun = mean (average_HR_game)): rezumați datele
Ieșire:
## # A tibble: 1 x 1## total_average_homerun#### 1 0.06882226
rezumat
Când doriți să returnați un rezumat pe grupuri, puteți utiliza:
# group by X1, X2, X3group(df, X1, X2, X3)
trebuie să dezgropați datele cu:
ungroup(df)
Tabelul de mai jos rezumă funcția pe care ați învățat-o cu resume ()
metodă |
funcţie |
cod |
---|---|---|
Rău |
Rău |
summarise(df,mean_x1 = mean(x1)) |
median |
median |
summarise(df,median_x1 = median(x1)) |
sumă |
sumă |
summarise(df,sum_x1 = sum(x1)) |
deviație standard |
sd |
summarise(df,sd_x1 = sd(x1)) |
interquartile |
IQR |
summarise(df,interquartile_x1 = IQR(x1)) |
minim |
min |
summarise(df,minimum_x1 = min(x1)) |
maxim |
max |
summarise(df,maximum_x1 = max(x1)) |
cuantil |
cuantil |
summarise(df,quantile_x1 = quantile(x1)) |
prima observație |
primul |
summarise(df,first_x1 = first(x1)) |
ultima observatie |
ultimul |
summarise(df,last_x1 = last(x1)) |
a n-a observație |
a n-a |
summarise(df,nth_x1 = nth(x1, 2)) |
numărul apariției |
n |
summarise(df,n_x1 = n(x1)) |
numărul de apariții distincte |
n_distinct |
summarise(df,n_distinct _x1 = n_distinct(x1)) |