Mainīgā kopsavilkums ir svarīgs, lai būtu priekšstats par datiem. Lai gan mainīgā lieluma apkopošana pa grupām sniedz labāku informāciju par datu izplatīšanu.
Šajā apmācībā jūs uzzināsiet, kā apkopot datu kopu pa grupām ar bibliotēku dplyr.
Šajā apmācībā jūs uzzināsiet
- Apkopot ()
- Group_by vs no group_by
- Funkcija apkopojumā ()
- Pamata funkcija
- Abonēšana
- Summa
- Standarta novirze
- Minimālais un maksimālais
- Skaits
- Pirmais un pēdējais
- n-tais novērojums
- Vairākas grupas
- Filtrēt
- Atvienot
Šajā apmācībā izmantosiet vatelīna datu kopu. Sākotnējā datu kopā ir 102816 novērojumi un 22 mainīgie. Jūs izmantosiet tikai 20 procentus no šīs datu kopas un izmantosiet šādus mainīgos:
- playerID: spēlētāja ID kods. Faktors
- yearID: gads. Faktors
- teamID: Komanda. faktors
- lgID: Līga. Faktors: AA AL FL NL PL UA
- AB: Pie sikspārņiem. Ciparu skaitlis
- G: spēles: spēlētāju spēlēto spēļu skaits. Ciparu skaitlis
- R: Skrien. Ciparu skaitlis
- HR: Homeruns. Ciparu skaitlis
- SH: Upurēšanas hits. Ciparu skaitlis
Pirms kopsavilkuma veikšanas veiciet šādas darbības, lai sagatavotu datus:
- 1. darbība: importējiet datus
- 2. darbība: atlasiet attiecīgos mainīgos
- 3. solis: kārtojiet datus
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)
Laba prakse, importējot datu kopu, ir izmantot funkciju glimpse (), lai iegūtu priekšstatu par datu kopas struktūru.
# Structure of the dataglimpse(data)
Izeja:
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,…
Apkopot ()
Summate () sintakse ir pamata un saskan ar citiem darbības vārdiem, kas iekļauti dplyr bibliotēkā.
summarise(df, variable_name=condition)arguments:- `df`: Dataset used to construct the summary statistics- `variable_name=condition`: Formula to create the new variable
Apskatiet zemāk esošo kodu:
summarise(data, mean_run =mean(R))
Kods Paskaidrojums
- apkopot (dati, vidējais_skrējiens = vidējais (R)): izveido mainīgo ar nosaukumu vidējais_krājums, kas ir kolonnas vidējais rādītājs no datu kopas datiem.
Izeja:
## mean_run## 1 19.20114
Var pievienot tik daudz mainīgo, cik vēlaties. Jūs atgriežat vidējos aizvadītos spēles un vidējos upura sitienus.
summarise(data, mean_games = mean(G),mean_SH = mean(SH, na.rm = TRUE))
Kods Paskaidrojums
- mean_SH = vidējais (SH, na.rm = TRUE): apkopojiet otro mainīgo. Jūs iestatījāt na.rm = TRUE, jo kolonnā SH ir trūkstošo novērojumu.
Izeja:
## mean_games mean_SH## 1 51.98361 2.340085
Group_by vs no group_by
Funkcijai summerise () bez group_by () nav jēgas. Tas rada kopsavilkuma statistiku pa grupām. Bibliotēka dplyr automātiski lieto funkciju grupai, kuru nododāt darbības vārda group_by iekšienē.
Ņemiet vērā, ka group_by lieliski darbojas ar visiem citiem darbības vārdiem (ti, mutate (), filter (), rendez (),…).
Cauruļvada operatoru ir ērti izmantot, ja jums ir vairāk nekā viens solis. Jūs varat aprēķināt vidējo mājas braucienu pēc beisbola līgas.
data % > %group_by(lgID) % > %summarise(mean_run = mean(HR))
Kods Paskaidrojums
- dati: datu kopa, ko izmanto, lai izveidotu kopsavilkuma statistiku
- group_by (lgID): aprēķiniet kopsavilkumu, grupējot mainīgo `lgID
- apkopot (mean_run = vidējais (HR)): Aprēķiniet vidējo homerun
Izeja:
### 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
Cauruļu operators darbojas arī ar ggplot (). Kopsavilkuma statistiku varat viegli parādīt ar diagrammu. Visi soļi tiek virzīti cauruļvada iekšpusē, līdz vīnoga ir zemes gabals. Šķiet, ka vizuālāk ir redzēt vidējo mājvietu pēc līgas ar bāra char. Zemāk redzamais kods parāda, cik spēcīgi var apvienot group_by (), apkopot () un ggplot ().
Jūs veicat šādu darbību:
- 1. darbība: atlasiet datu rāmi
- 2. darbība: datu grupēšana
- 3. solis: apkopojiet datus
- 4. solis: uzzīmējiet kopsavilkuma statistiku
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()"))
Izeja:
Funkcija apkopojumā ()
Darbības vārds apkopot () ir saderīgs ar gandrīz visām R. funkcijām. Šeit ir īss noderīgu funkciju saraksts, ko varat izmantot kopā ar apkopot ():
Mērķis | Funkcija | Apraksts |
---|---|---|
Pamata | vidēji () | Vektora x vidējais lielums |
mediāna () | Vektora x mediāna | |
summa () | Vektora x summa | |
variācija | sd () | vektora x standartnovirze |
IQR () | Vektora x starpkvartile | |
Diapazons | min () | Minimālais vektors x |
maks. () | Vektora x maksimums | |
kvantile () | Vektora x kvantile | |
Pozīcija | pirmais () | Izmantot kopā ar group_by () Grupas pirmais novērojums |
Pēdējais() | Izmantot kopā ar group_by (). Pēdējais grupas novērojums | |
n-tā () | Izmantot kopā ar group_by (). grupas n novērojums | |
Skaits | n () | Izmantot kopā ar group_by (). Saskaitiet rindu skaitu |
n_distinct () | Izmantot kopā ar group_by (). Saskaitiet atšķirīgu novērojumu skaitu |
Mēs redzēsim piemērus visām 1. tabulas funkcijām.
Pamata funkcija
Iepriekšējā piemērā kopsavilkuma statistiku neglabājāt datu rāmī.
Varat veikt divas darbības, lai no kopsavilkuma izveidotu datuma rāmi:
- 1. darbība: saglabājiet datu rāmi turpmākai lietošanai
- 2. solis: Izmantojiet datu kopu, lai izveidotu līnijas diagrammu
1. solis. Jūs aprēķināt vidējo spēlēto spēļu skaitu pa gadu.
## Meanex1 <- data % > %group_by(yearID) % > %summarise(mean_game_year = mean(G))head(ex1)
Kods Paskaidrojums
- Vatelīna datu kopas kopsavilkuma statistika tiek saglabāta datu ietvarā ex1.
Izeja:
## # 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
2. solis. Jūs parādāt kopsavilkuma statistiku ar līnijas diagrammu un redzat tendenci.
# 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"))
Izeja:
Abonēšana
Funkcija apkopot () ir saderīga ar apakškopu.
## 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]))
Kods Paskaidrojums
- median_at_bat_league_no_zero = mediāna (AB [AB> 0]): Mainīgais AB satur daudz 0. Varat salīdzināt mainīgā at sikspārņa mediānu ar 0 un bez tā.
Izeja:
## # 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
Summa
Vēl viena noderīga funkcija mainīgā apkopošanai ir summa ().
Jūs varat pārbaudīt, kurās līgās ir vairāk mājas braucienu.
## Sumdata % > %group_by(lgID) % > %summarise(sum_homerun_league = sum(HR))
Izeja:
## # 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
Standarta novirze
Datu izplatību aprēķina ar R standartnovirzi vai sd ().
# Spreaddata % > %group_by(teamID) % > %summarise(sd_at_bat_league = sd(HR))
Izeja:
## # 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
Katrā komandā ir daudz nevienlīdzības par mājas braucienu.
Minimālais un maksimālais
Minimālajam un maksimālajam vektoram var piekļūt, izmantojot funkcijas min () un max ().
Zemāk redzamais kods atgriež mazāko un lielāko spēļu skaitu sezonā, ko spēlējis spēlētājs.
# Min and maxdata % > %group_by(playerID) % > %summarise(min_G = min(G),max_G = max(G))
Izeja:
## # 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
Skaits
Skaitīt novērojumus pēc grupas vienmēr ir laba ideja. Izmantojot R, varat apkopot sastopamības skaitu ar n ().
Piemēram, zemāk redzamais kods aprēķina katra spēlētāja spēlēto gadu skaitu.
# count observationsdata % > %group_by(playerID) % > %summarise(number_year = n()) % > %arrange(desc(number_year))
Izeja:
## # 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
Pirmais un pēdējais
Jūs varat izvēlēties grupas pirmo, pēdējo vai n-to pozīciju.
Piemēram, jūs varat atrast katra spēlētāja pirmo un pēdējo gadu.
# first and lastdata % > %group_by(playerID) % > %summarise(first_appearance = first(yearID),last_appearance = last(yearID))
Izeja:
## # 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-tais novērojums
Funkcija n-tā () papildina pirmo () un pēdējo (). Jūs varat piekļūt n-tajam novērojumam grupā ar atgriezto indeksu.
Piemēram, varat filtrēt tikai otro gadu, kad komanda spēlēja.
# nthdata % > %group_by(teamID) % > %summarise(second_game = nth(yearID, 2)) % > %arrange(second_game)
Izeja:
## # 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
Atsevišķs novērojumu skaits
Funkcija n () atgriež novērojumu skaitu pašreizējā grupā. Slēgta funkcija n () ir n_distinct (), kas uzskaita unikālo vērtību skaitu.
Nākamajā piemērā jūs saskaitāt to spēlētāju kopskaitu, kurus komanda ir savervējusi visos periodos.
# distinct valuesdata % > %group_by(teamID) % > %summarise(number_player = n_distinct(playerID)) % > %arrange(desc(number_player))
Kods Paskaidrojums
- group_by (teamID): grupa pēc gada un komandas
- kopsavilkums (skaits_spēlētājs = n_atšķiras (spēlētājaID)): saskaita atsevišķo spēlētāju skaitu pa komandām
- izkārtot (desc (number_player)): kārtojiet datus pēc spēlētāja skaita
Izeja:
## # 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
Vairākas grupas
Kopsavilkuma statistiku var realizēt vairākās grupās.
# Multiple groupsdata % > %group_by(yearID, teamID) % > %summarise(mean_games = mean(G)) % > %arrange(desc(teamID, yearID))
Kods Paskaidrojums
- group_by (yearID, teamID): grupa pēc gada un komandas
- apkopot (vidējās_spēles = vidējais (G)): apkopojiet spēlētāju skaitu
- sakārtot (desc (teamID, yearID)): kārtojiet datus pēc komandas un gada
Izeja:
## # 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
Filtrēt
Pirms plānojat veikt kādu darbību, varat filtrēt datu kopu. Datu kopa sākas 1871. gadā, un analīzei nav nepieciešami gadi pirms 1980. gada.
# Filterdata % > %filter(yearID > 1980) % > %group_by(yearID) % > %summarise(mean_game_year = mean(G))
Kods Paskaidrojums
- filtrs (gada ID> 1980): filtrējiet datus, lai parādītu tikai attiecīgos gadus (ti, pēc 1980. gada)
- group_by (yearID): grupa pa gadiem
- apkopot (vidējais_spēles_gads = vidējais (G)): apkopojiet datus
Izeja:
## # 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
Atvienot
Visbeidzot, pirms vēlaties mainīt aprēķina līmeni, jums ir jānoņem grupa.
# 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))
Kods Paskaidrojums
- filtrs (HR> 0): izslēdz nulles homerun
- group_by (playerID): grupa pēc spēlētāja
- apkopot (vidējais_ HR_spēle = summa (HR) / summa (G)): aprēķiniet vidējo mājas spēli pēc spēlētāja
- atgrupēt (): noņemt grupēšanu
- apkopot (total_average_homerun = vidējais (average_HR_game)): Apkopojiet datus
Izeja:
## # A tibble: 1 x 1## total_average_homerun#### 1 0.06882226
Kopsavilkums
Ja vēlaties atgriezt kopsavilkumu pa grupām, varat izmantot:
# group by X1, X2, X3group(df, X1, X2, X3)
dati ir jāgrupē ar:
ungroup(df)
Zemāk esošajā tabulā ir apkopota funkcija, kuru esat iemācījies ar apkopot ()
metodi |
funkciju |
kods |
---|---|---|
nozīmē |
nozīmē |
summarise(df,mean_x1 = mean(x1)) |
mediāna |
mediāna |
summarise(df,median_x1 = median(x1)) |
summa |
summa |
summarise(df,sum_x1 = sum(x1)) |
standarta novirze |
sd |
summarise(df,sd_x1 = sd(x1)) |
starpkvartils |
IQR |
summarise(df,interquartile_x1 = IQR(x1)) |
minimums |
min |
summarise(df,minimum_x1 = min(x1)) |
maksimāli |
maks |
summarise(df,maximum_x1 = max(x1)) |
kvantile |
kvantile |
summarise(df,quantile_x1 = quantile(x1)) |
pirmais novērojums |
vispirms |
summarise(df,first_x1 = first(x1)) |
pēdējais novērojums |
Pēdējais |
summarise(df,last_x1 = last(x1)) |
n-tais novērojums |
n |
summarise(df,nth_x1 = nth(x1, 2)) |
notikuma skaits |
n |
summarise(df,n_x1 = n(x1)) |
atšķirīgu gadījumu skaits |
n_atšķirties |
summarise(df,n_distinct _x1 = n_distinct(x1)) |