R Koondfunktsioon: Summarize & Group_by() Näide
Muutuja kokkuvõte on andmetest aimu saamiseks oluline. Kuigi muutuja rühmade kaupa kokkuvõte annab paremat teavet andmete jaotuse kohta.
Sellest õpetusest saate teada, kuidas dplyr teegiga andmestik rühmade kaupa kokku võtta.
Selle õpetuse jaoks kasutate vatiini andmekogu. Algne andmestik sisaldab 102816 vaatlust ja 22 muutujat. Kasutate ainult 20 protsenti sellest andmekogumist ja kasutate järgmisi muutujaid.
- mängija ID: mängija ID kood. tegur
- aasta ID: Aasta. tegur
- meeskonna ID: meeskond. tegur
- lgID: Liiga. Tegur: AA AL FL NL PL UA
- AB: Nahkhiirte juures. Numbriline
- G: Mängud: mängija mängude arv. Numbriline
- R: Jookseb. Numbriline
- HR: Homeruns. Numbriline
- SH: ohverdatavad hitid. Numbriline
Enne kokkuvõtte tegemist teete andmete ettevalmistamiseks järgmised sammud.
- 1. toiming: importige andmed
- 2. samm: valige asjakohased muutujad
- 3. samm: sortige andmed
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)
Andmestiku importimisel on hea tava kasutada funktsiooni glimpse(), et saada ülevaade andmestiku struktuurist.
# Structure of the data glimpse(data)
Väljund:
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, ...
Kokkuvõte ()
Funktsiooni summarise() süntaks on põhiline ja kooskõlas teiste dplyr teegis sisalduvate tegusõnadega.
summarise(df, variable_name=condition) arguments: - `df`: Dataset used to construct the summary statistics - `variable_name=condition`: Formula to create the new variable
Vaadake allolevat koodi:
summarise(data, mean_run =mean(R))
Code Selgitus
- summarise(data, mean_run = mean(R)): loob muutuja nimega mean_run, mis on andmestiku andmetest käivitatud veeru keskmine.
Väljund:
## mean_run ## 1 19.20114
Saate lisada nii palju muutujaid, kui soovite. Tagastate keskmised mängitud mängud ja keskmised ohverdatavad tabamused.
summarise(data, mean_games = mean(G),
mean_SH = mean(SH, na.rm = TRUE))
Code Selgitus
- keskmine_SH = keskmine (SH, na.rm = TRUE): võtke kokku teine muutuja. Määrasite väärtuse na.rm = TRUE, kuna veerg SH sisaldab puuduvaid vaatlusi.
Väljund:
## mean_games mean_SH ## 1 51.98361 2.340085
Group_by vs no group_by
Funktsioonil summerise() ilma group_by()ta pole mõtet. See loob kokkuvõtliku statistika rühmade kaupa. raamatukogu dplyr rakendab funktsiooni automaatselt grupile, mille te verbis group_by edastasite.
Pange tähele, et group_by töötab suurepäraselt kõigi teiste tegusõnadega (st mute(), filter(), arrange(), …).
Torujuhtme operaatorit on mugav kasutada, kui teil on rohkem kui üks samm. Saate arvutada keskmise homeruni pesapalliliiga järgi.
data % > % group_by(lgID) % > % summarise(mean_run = mean(HR))
Code Selgitus
- andmed: kokkuvõtliku statistika koostamiseks kasutatav andmestik
- group_by(lgID): Arvuta kokkuvõte grupi järgiping muutuja `lgID`
- summarise(mean_run = keskmine(HR)): Arvutage keskmine homerun
Väljund:
## # 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
Toruoperaator töötab ka ggplot()-ga. Kokkuvõtvat statistikat saate hõlpsasti graafiku abil näidata. Kõik astmed lükatakse torujuhtme sisse, kuni haarats on krundil. Tundub visuaalsem näha keskmist homerunit liigade kaupa tulpsärgiga. Allolev kood näitab rühma_by(), summarise() ja ggplot() kombineerimise võimet.
Teete järgmise sammu:
- 1. samm: valige andmeraam
- 2. samm: rühmitage andmed
- 3. samm: tehke andmetest kokkuvõte
- 4. samm: koostage kokkuvõtlik statistika
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()"
)
)
Väljund:
Funktsioon summaris()
Tegusõna summarise() ühildub peaaegu kõigi R-i funktsioonidega. Siin on lühike nimekiri kasulikest funktsioonidest, mida saate koos funktsiooniga summarise() kasutada:
| Eesmärk | funktsioon | Kirjeldus |
|---|---|---|
| Põhi- | tähendab () | Vektori x keskmine |
| mediaan() | Vektori x mediaan | |
| summa() | Vektori x summa | |
| variatsioon | sd() | vektori x standardhälve |
| IQR() | Vektori x interkvartiil | |
| Valik | min() | Vektori x miinimum |
| max() | Vektori x maksimum | |
| kvantiil() | Vektori x kvantiil | |
| ASUKOHT | esimene () | Kasuta koos group_by()-ga Rühma esimene vaatlus |
| viimane () | Kasutage koos group_by(). Rühma viimane tähelepanek | |
| nth() | Kasutage koos group_by(). rühma n-s vaatlus | |
| Loendama | n() | Kasutage koos group_by(). Loendage ridade arv |
| n_distinct() | Kasutage koos group_by(). Loendage erinevate vaatluste arv |
Näeme näiteid iga tabeli 1 funktsiooni kohta.
Põhifunktsioon
Eelmises näites ei salvestanud te kokkuvõtvat statistikat andmeraami.
Kokkuvõttest kuupäevaraami loomiseks võite jätkata kahes etapis.
- 1. samm: salvestage andmeraam edasiseks kasutamiseks
- 2. samm: kasutage joondiagrammi loomiseks andmestikku
Step 1) Arvutate aasta keskmise mängitud mängude arvu.
## Mean ex1 <- data % > % group_by(yearID) % > % summarise(mean_game_year = mean(G)) head(ex1)
Code Selgitus
- Löögiandmestiku kokkuvõtlik statistika salvestatakse andmeraami ex1.
Väljund:
## # 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
Step 2) Näitate kokkuvõtvat statistikat joondiagrammiga ja näete trendi.
# 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"
)
)
Väljund:
Alamhulk
Funktsioon summarise() ühildub alamhulgaga.
## 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 Selgitus
- mediaan_at_bat_league_no_zero = mediaan(AB[AB > 0]): muutuja AB sisaldab palju 0. Saate võrrelda juures nahkhiir muutuja 0-ga ja ilma.
Väljund:
## # 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
Summa
Teine kasulik funktsioon muutuja koondamiseks on summa().
Saate kontrollida, millistel liigadel on rohkem homeruni.
## Sum data % > % group_by(lgID) % > % summarise(sum_homerun_league = sum(HR))
Väljund:
## # 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
Standardhälve
Andmete jaotus arvutatakse standardhälbe või sd() abil R-s.
# Spread data % > % group_by(teamID) % > % summarise(sd_at_bat_league = sd(HR))
Väljund:
## # 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
Iga meeskonna sooritatud kodujooksu kvantiteedis on palju ebavõrdsust.
Miinimum ja maksimum
Funktsioonidega min() ja max() pääsete ligi vektori miinimumile ja maksimumile.
Allolev kood tagastab väikseima ja suurima mängude arvu mängija mängitud hooajal.
# Min and max
data % > %
group_by(playerID) % > %
summarise(min_G = min(G),
max_G = max(G))
Väljund:
## # 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
Loendama
Vaatluste loendamine rühmade kaupa on alati hea mõte. R-iga saate n()-ga liita esinemiste arvu.
Näiteks arvutab allolev kood iga mängija mängitud aastate arvu.
# count observations data % > % group_by(playerID) % > % summarise(number_year = n()) % > % arrange(desc(number_year))
Väljund:
## # 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
Esimene ja viimane
Saate valida rühma esimese, viimase või n-nda positsiooni.
Näiteks leiate iga mängija esimese ja viimase aasta.
# first and last data % > % group_by(playerID) % > % summarise(first_appearance = first(yearID), last_appearance = last(yearID))
Väljund:
## # 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-s tähelepanek
Fonktsioon nth() täiendab sõnu first() ja last(). Rühma n-ndale vaatlusele pääsete juurde naastava indeksiga.
Näiteks saate filtreerida ainult teise aasta, mil meeskond mängis.
# nth data % > % group_by(teamID) % > % summarise(second_game = nth(yearID, 2)) % > % arrange(second_game)
Väljund:
## # 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
Erinev vaatluste arv
Funktsioon n() tagastab vaatluste arvu praeguses rühmas. Funktsiooni n() suletud funktsioon on n_distinct(), mis loendab kordumatute väärtuste arvu.
Järgmises näites liidate kokku mängijate koguarv, kelle meeskond kõigi perioodide jooksul värvas.
# distinct values data % > % group_by(teamID) % > % summarise(number_player = n_distinct(playerID)) % > % arrange(desc(number_player))
Code Selgitus
- group_by(teamID): rühmitus aasta järgi ja meeskond
- summarise(number_player = n_eristav(mängija ID)): loendage mängijate arv meeskonnati
- arrange(desc(number_player)): sorteeri andmed mängijate arvu järgi
Väljund:
## # 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
Mitu rühma
Kokkuvõtvat statistikat saab teha mitme rühma kohta.
# Multiple groups data % > % group_by(yearID, teamID) % > % summarise(mean_games = mean(G)) % > % arrange(desc(teamID, yearID))
Code Selgitus
- group_by(yearID, teamID): rühmitamine aasta järgi ja meeskond
- summarise(mean_games = keskmine(G)): võta kokku mängijate arv
- arrange(desc(teamID, yearID)): Sorteeri andmed meeskonna ja aasta järgi
Väljund:
## # 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
filtrid
Enne toimingu tegemist saate andmestiku filtreerida. Andmekogum algab 1871. aastast ja analüüs ei vaja 1980. aastale eelnevaid aastaid.
# Filter data % > % filter(yearID > 1980) % > % group_by(yearID) % > % summarise(mean_game_year = mean(G))
Code Selgitus
- filter(yearID > 1980): filtreerige andmed, et kuvada ainult asjakohased aastad (st pärast 1980. aastat)
- group_by(yearID): rühmita aasta järgi
- summarise(mean_game_year = keskmine(G)): Tehke andmete kokkuvõte
Väljund:
## # 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
Lõhu
Viimaseks, aga mitte vähem tähtsaks, peate eemaldama mulla.ping enne kui soovite arvutustaset muuta.
# 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 Selgitus
- filter(HR >0) : välista null homerun
- group_by(playerID): rühm mängija järgi
- summarise(average_HR_game = summa(HR)/sum(G)): Arvutage mängija keskmine kodujooksu
- ungroup(): eemalda rühmping
- summarise(total_average_homerun = mean(average_HR_game)): Tehke andmete kokkuvõte
Väljund:
## # A tibble: 1 x 1 ## total_average_homerun ## <dbl> ## 1 0.06882226
kokkuvõte
Kui soovite tagastada kokkuvõtte rühmade kaupa, saate kasutada järgmist.
# group by X1, X2, X3 group(df, X1, X2, X3)
peate andmed lahti rühmitama:
ungroup(df)
Allolev tabel võtab kokku funktsiooni, mille õppisite summarise() abil
| Meetod | funktsioon | Code |
|---|---|---|
| keskmine | keskmine |
summarise(df,mean_x1 = mean(x1)) |
| mediaan | mediaan |
summarise(df,median_x1 = median(x1)) |
| summa | summa |
summarise(df,sum_x1 = sum(x1)) |
| standardhälve | sd |
summarise(df,sd_x1 = sd(x1)) |
| interkvartiil | I.Q.R. |
summarise(df,interquartile_x1 = IQR(x1)) |
| miinimum | minutit |
summarise(df,minimum_x1 = min(x1)) |
| maksimaalne | max |
summarise(df,maximum_x1 = max(x1)) |
| kvantiil | kvantiil |
summarise(df,quantile_x1 = quantile(x1)) |
| esimene tähelepanek | esimene |
summarise(df,first_x1 = first(x1)) |
| viimane tähelepanek | viimane |
summarise(df,last_x1 = last(x1)) |
| n-s tähelepanek | n |
summarise(df,nth_x1 = nth(x1, 2)) |
| esinemise arv | n |
summarise(df,n_x1 = n(x1)) |
| eristavate esinemiste arv | n_eristav |
summarise(df,n_distinct _x1 = n_distinct(x1)) |


