R suvestinė funkcija: apibendrinkite & Group_by () pavyzdys

Kintamojo santrauka yra svarbi, kad būtų idėja apie duomenis. Nors apibendrinant kintamąjį pagal grupes, gaunama geresnė informacija apie duomenų pasiskirstymą.

Šioje pamokoje sužinosite, kaip apibendrinti duomenų rinkinį pagal grupę su „dplyr“ biblioteka.

Šioje pamokoje sužinosite

  • Apibendrinti ()
  • Group_by vs no group_by
  • Funkcija apibendrinti ()
  • Pagrindinė funkcija
  • Abonementas
  • Suma
  • Standartinis nuokrypis
  • Minimalus ir maksimalus
  • Grafas
  • Pirmas ir paskutinis
  • n-tas stebėjimas
  • Kelios grupės
  • Filtras
  • Išgrupuoti

Šioje pamokoje naudosite vatymo duomenų rinkinį. Originaliame duomenų rinkinyje yra 102816 stebėjimų ir 22 kintamieji. Naudosite tik 20 procentų šio duomenų rinkinio ir naudosite šiuos kintamuosius:

  • playerID: grotuvo ID kodas. Veiksnys
  • yearID: Metai. Veiksnys
  • teamID: komanda. faktorius
  • lgID: lyga. Veiksnys: AA AL FL NL PL UA
  • AB: Šikšnosparniai. Skaitmeninis
  • G: Žaidimai: žaidėjo žaidimų skaičius. Skaitmeninis
  • R: Bėga. Skaitmeninis
  • HR: Homeruns. Skaitmeninis
  • SH: Aukos hitai. Skaitmeninis

Prieš atlikdami suvestinę, atlikite šiuos veiksmus, kad parengtumėte duomenis:

  • 1 veiksmas: importuokite duomenis
  • 2 žingsnis: Pasirinkite atitinkamus kintamuosius
  • 3 žingsnis: Rūšiuoti duomenis
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)

Gera praktika, kai importuojate duomenų rinkinį, yra naudoti žvilgsnio () funkciją, kad būtų idėja apie duomenų rinkinio struktūrą.

# Structure of the dataglimpse(data)

Išvestis:

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

Apibendrinti ()

Summate () sintaksė yra pagrindinė ir atitinka kitus veiksmažodžius, esančius dplyr bibliotekoje.

summarise(df, variable_name=condition)arguments:- `df`: Dataset used to construct the summary statistics- `variable_name=condition`: Formula to create the new variable

Pažvelkite į žemiau esantį kodą:

summarise(data, mean_run =mean(R))

Kodo paaiškinimas

  • apibendrinti (duomenys, vidutinis_bėgimas = vidurkis (R)): sukuria kintamąjį, pavadintą vidurkis, kuris yra duomenų rinkinio duomenų stulpelio vidurkis.

Išvestis:

## mean_run## 1 19.20114

Galite pridėti tiek kintamųjų, kiek norite. Grąžinate vidutinius sužaistus žaidimus ir vidutinius aukos smūgius.

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

Kodo paaiškinimas

  • mean_SH = vidurkis (SH, na.rm = TRUE): Apibendrinkite antrąjį kintamąjį. Nustatėte na.rm = TRUE, nes stulpelyje SH yra trūkstamų stebėjimų.

Išvestis:

## mean_games mean_SH## 1 51.98361 2.340085 

Group_by vs no group_by

Funkcija summerise () be group_by () neturi jokios prasmės. Tai sukuria suvestinę statistiką pagal grupes. Biblioteka „dplyr“ automatiškai taiko funkciją grupei, kurią perdavėte veiksmažodžio group_by viduje.

Atkreipkite dėmesį, kad group_by puikiai veikia su visais kitais veiksmažodžiais (ty mutuoti (), filtruoti (), tvarkyti (),…).

Dujotiekio operatorių patogu naudoti, kai turite daugiau nei vieną žingsnį. Galite apskaičiuoti vidutinę namų rungtį pagal beisbolo lygą.

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

Kodo paaiškinimas

  • duomenys: duomenų rinkinys, naudojamas sudarant suvestinę statistiką
  • group_by (lgID): Apskaičiuokite santrauką grupuodami kintamąjį `lgID
  • apibendrinti (vidurkis = vidutinis (HR)): Apskaičiuokite vidutinį pradinį bėgimą

Išvestis:

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

Vamzdžių operatorius taip pat dirba su „ggplot“ (). Santraukos statistiką galite lengvai parodyti naudodami diagramą. Visi žingsniai stumiami dujotiekio viduje tol, kol vynuogė bus suplanuota. Atrodo vaizdingiau matyti vidutinį namų lygos varžybų rezultatą pagal lygą su baro char. Žemiau pateiktas kodas parodo, kaip kartu sujungti grupę_grupė (), apibendrinti () ir ggplot ().

Atliksite šį veiksmą:

  • 1 žingsnis: Pasirinkite duomenų rėmelį
  • 2 žingsnis: Grupuokite duomenis
  • 3 žingsnis: Apibendrinkite duomenis
  • 4 žingsnis: Nubraižykite suvestinės 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()"))

Išvestis:

Funkcija apibendrinti ()

Veiksmažodis summarize () yra suderinamas su beveik visomis R. funkcijomis. Čia pateikiamas trumpas naudingų funkcijų, kurias galite naudoti kartu su summarize (), sąrašas:

Tikslas Funkcija apibūdinimas
Pagrindinis reiškia () Vektoriaus x vidurkis
mediana () Vektoriaus x mediana
suma() Vektoriaus x suma
variacija SD () vektoriaus x standartinis nuokrypis
IQR () Vektoriaus x tarpkvartilis
diapazonas min. () Minimalus vektorius x
maks. () Didžiausias vektorius x
kvantilis () Vektoriaus x kvantilis
Pozicija Pirmas() Naudokite su group_by () Pirmasis grupės stebėjimas
paskutinis () Naudoti su group_by (). Paskutinis grupės pastebėjimas
n-oji () Naudoti su group_by (). n-tasis grupės stebėjimas
Grafas n () Naudoti su group_by (). Suskaičiuokite eilučių skaičių
n_distinct () Naudoti su group_by (). Suskaičiuokite skirtingų stebėjimų skaičių

Pamatysime kiekvienos 1 lentelės funkcijos pavyzdžius.

Pagrindinė funkcija

Ankstesniame pavyzdyje jūs nesaugojote suvestinės statistikos duomenų rėmelyje.

Norėdami sugeneruoti datos rėmelį iš suvestinės, galite atlikti du veiksmus.

  • 1 veiksmas: saugokite duomenų rėmelį tolesniam naudojimui
  • 2 žingsnis: Naudokite duomenų rinkinį, kad sukurtumėte linijos diagramą

1 žingsnis) Apskaičiuojate vidutinį žaistų žaidimų skaičių pagal metus.

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

Kodo paaiškinimas

  • Šikšnosparnių duomenų rinkinio suvestinė statistika saugoma duomenų rėmelyje ex1.

Išvestis:

## # 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 žingsnis) Parodote suvestinę statistiką su linijos diagrama ir matote tendenciją.

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

Išvestis:

Abonementas

Funkcija apibendrinti () yra suderinama su subset.

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

Kodo paaiškinimas

  • median_at_bat_league_no_zero = mediana (AB [AB> 0]): Kintamajame AB yra daug 0. Galite palyginti šikšnosparnio kintamojo medianą su 0 ir be jos.

Išvestis:

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

Suma

Kita naudinga funkcija kintamajam sujungti yra suma ().

Galite patikrinti, kuriose lygose yra daugiau namų varžybų.

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

Išvestis:

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

Standartinis nuokrypis

Sklaidos duomenys apskaičiuojami naudojant R standartinį nuokrypį arba sd ().

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

Išvestis:

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

Kiekvienoje komandoje atlikta daugybė nubrėžtų rezultatų.

Minimalus ir maksimalus

Minimalų ir didžiausią vektoriaus dydį galite pasiekti naudodami funkcijas min () ir max ().

Žemiau pateiktas kodas pateikia mažiausią ir didžiausią žaidimų skaičių per sezoną, kurį žaidė žaidėjas.

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

Išvestis:

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

Grafas

Skaičiuoti stebėjimus pagal grupę visada yra gera idėja. Naudodami R, galite apibendrinti įvykių skaičių su n ().

Pavyzdžiui, žemiau pateiktas kodas apskaičiuoja kiekvieno žaidėjo metų skaičių.

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

Išvestis:

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

Pirmas ir paskutinis

Galite pasirinkti pirmąją, paskutinę arba n-ąją grupės poziciją.

Pavyzdžiui, galite rasti kiekvieno žaidėjo pirmuosius ir paskutinius metus.

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

Išvestis:

## # 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-tas stebėjimas

Fonkcija n-oji () papildo pirmąją () ir paskutinę (). Galite grįžti į n-ąjį grupės stebėjimą su indeksu.

Pvz., Galite filtruoti tik antrus metus, kai žaidė komanda.

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

Išvestis:

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

Skirtas stebėjimo skaičius

Funkcija n () pateikia dabartinės grupės stebėjimų skaičių. Uždaryta n () funkcija yra n_distinct (), kuri suskaičiuoja unikalių reikšmių skaičių.

Kitame pavyzdyje susumuosite komandos žaidėjų, surinktų per visus laikotarpius, skaičių.

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

Kodo paaiškinimas

  • group_by (teamID): Grupuokite pagal metus ir komandą
  • apibendrinti (number_player = n_distinct (playerID)): suskaičiuokite atskirą žaidėjų skaičių pagal komandą
  • sutvarkyti (desc (number_player)): Rūšiuoti duomenis pagal žaidėjo skaičių

Išvestis:

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

Kelios grupės

Apibendrintą statistiką galima atlikti keliose grupėse.

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

Kodo paaiškinimas

  • group_by (yearID, teamID): Grupuokite pagal metus ir komandą
  • apibendrinti (mean_games = mean (G)): Apibendrinkite žaidėjo skaičių
  • tvarkyti (desc (teamID, yearID)): Rūšiuoti duomenis pagal komandą ir metus

Išvestis:

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

Filtras

Prieš ketindami atlikti operaciją, galite filtruoti duomenų rinkinį. Duomenų rinkinys prasideda 1871 m., O analizuoti nereikia metų iki 1980 m.

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

Kodo paaiškinimas

  • filtras (metaiID> 1980): filtruokite duomenis, kad būtų rodomi tik atitinkami metai (ty po 1980 m.)
  • group_by (yearID): grupė pagal metus
  • apibendrinti (vidutinis_žaidimo_metas = vidurkis (G)): apibendrinti duomenis

Išvestis:

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

Išgrupuoti

Paskutinis, bet ne mažiau svarbus dalykas, prieš pakeisdami skaičiavimo lygį, turite pašalinti grupavimą.

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

Kodo paaiškinimas

  • filtras (HR> 0): neįtraukite nulio homerun
  • group_by (playerID): grupė pagal žaidėją
  • apibendrinti (vidutinis_ŽV_žaidimas = suma (HR) / suma (G)): Apskaičiuokite vidutinį namų žaidimą pagal žaidėją
  • ungroup (): pašalinkite grupavimą
  • apibendrinti (total_average_homerun = vidurkis (average_HR_game)): Apibendrinti duomenis

Išvestis:

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

Santrauka

Jei norite grąžinti suvestinę pagal grupes, galite naudoti:

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

turite išgrupuoti duomenis su:

ungroup(df) 

Žemiau esančioje lentelėje pateikiama funkcija, kurią išmokote su apibendrinti ()

metodas

funkcija

kodas

reiškia

reiškia

summarise(df,mean_x1 = mean(x1))

mediana

mediana

summarise(df,median_x1 = median(x1))

suma

suma

summarise(df,sum_x1 = sum(x1))

standartinis nuokrypis

sd

summarise(df,sd_x1 = sd(x1))

tarpkvartilis

IQR

summarise(df,interquartile_x1 = IQR(x1))

minimumas

min

summarise(df,minimum_x1 = min(x1))

maksimaliai

maks

summarise(df,maximum_x1 = max(x1))

kvantilis

kvantilis

summarise(df,quantile_x1 = quantile(x1))

pirmasis pastebėjimas

Pirmas

summarise(df,first_x1 = first(x1))

paskutinis pastebėjimas

paskutinis

summarise(df,last_x1 = last(x1))

n-tas stebėjimas

n-tasis

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

įvykio skaičius

n

summarise(df,n_x1 = n(x1))

atskiro įvykio skaičius

n_skiriamas

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

Įdomios straipsniai...