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:

Group_by Näide koos Kokkuvõttega

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:

Põhifunktsiooni näide

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

Võta see postitus kokku järgmiselt: