R összesített funkció: Összefoglalás & Group_by () Példa

Tartalomjegyzék:

Anonim

A változó összefoglalása fontos, hogy legyen elképzelésünk az adatokról. Bár egy változó csoportonkénti összesítése jobb információt nyújt az adatok megoszlásáról.

Ebben az oktatóanyagban megtudhatja, hogyan foglalhatja össze az adatkészletet csoportonként a dplyr könyvtárral.

Ebben az oktatóanyagban megtanulja

  • Összesít()
  • Group_by vs no group_by
  • Funkció az összesítésben ()
  • Alapfunkció
  • Előfizetés
  • Összeg
  • Szórás
  • Minimum és maximum
  • Számol
  • Első és utolsó
  • n-edik megfigyelés
  • Több csoport
  • Szűrő
  • Csoportosítás megszüntetése

Ehhez az oktatóanyaghoz az ütőképes adatkészletet fogja használni. Az eredeti adatkészlet 102816 megfigyelést és 22 változót tartalmaz. Csak ennek az adatkészletnek a 20 százalékát fogja használni, és a következő változókat használja:

  • playerID: Játékos azonosító kód. Tényező
  • évID: Év. Tényező
  • teamID: Csapat. tényező
  • lgID: Liga. Faktor: AA AL FL NL PL UA
  • AB: Denevéreknél. Numerikus
  • G: Játékok: egy játékos által lejátszott játékok száma. Numerikus
  • R: Fut. Numerikus
  • HR: Homeruns. Numerikus
  • SH: Áldozati slágerek. Numerikus

Az összefoglaló végrehajtása előtt a következő lépéseket teszi az adatok előkészítéséhez:

  • 1. lépés: Importálja az adatokat
  • 2. lépés: Válassza ki a releváns változókat
  • 3. lépés: Rendezze az adatokat
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)

Az adatkészlet importálásakor jó gyakorlat, ha a glimpse () függvény segítségével képet kap az adatkészlet felépítéséről.

# Structure of the dataglimpse(data)

Kimenet:

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

Összesít()

Az summarize () szintaxisa alapvető és összhangban áll a dplyr könyvtárban szereplő többi igével.

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

Nézze meg az alábbi kódot:

summarise(data, mean_run =mean(R))

Kód Magyarázat

  • összesítés (adatok, átlagos_fut = átlag (R)): Létrehoz egy átlagos_futás nevű változót, amely az adatkészlet adatokból futtatott oszlop átlaga.

Kimenet:

## mean_run## 1 19.20114

Hozzáadhat annyi változót, amennyit csak akar. Visszaadja az átlagos lejátszott meccseket és az átlagos áldozati találatokat.

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

Kód Magyarázat

  • átlag_SH = átlag (SH, na.rm = IGAZ): Összegezzen egy második változót. A na.rm = TRUE értéket állítja be, mert az SH oszlop hiányzó megfigyeléseket tartalmaz.

Kimenet:

## mean_games mean_SH## 1 51.98361 2.340085 

Group_by vs no group_by

A summerise () függvénynek group_by () nélkül nincs értelme. Összefoglaló statisztikát készít csoportonként. A dplyr könyvtár automatikusan alkalmaz egy függvényt arra a csoportra, amelyet a group_by igén belül továbbított.

Ne feledje, hogy a group_by tökéletesen működik az összes többi igével (pl. Mutál (), szűr ((), elrendez (),…).

Kényelmes a csővezeték-üzemeltetőt használni, ha több lépése van. Kiszámíthatja az átlagos otthoni futamot baseball bajnokság szerint.

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

Kód Magyarázat

  • adatok: Az összesítő statisztikák összeállításához használt adatkészlet
  • group_by (lgID): Számítsa ki az összegzést az `lgID változó csoportosításával
  • összegez (átlag_fut = átlag (HR)): Számítsa ki az átlagos homerun-t

Kimenet:

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

A csőkezelő a ggplot () -val is működik. Könnyedén megjelenítheti az összefoglaló statisztikát egy grafikon segítségével. Az összes lépést a csővezeték belsejébe tolják, amíg a szőlő meg nem készül. Vizuálisabbnak tűnik látni az átlagos házi futást bajnokságonként, bárral. Az alábbi kód bemutatja a group_by (), summise () és ggplot () együttes kombinálásának erejét.

A következő lépést fogja megtenni:

  • 1. lépés: Válassza ki az adatkeretet
  • 2. lépés: Csoportosítsa az adatokat
  • 3. lépés: Összegezze az adatokat
  • 4. lépés: ábrázolja az összefoglaló statisztikákat
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()"))

Kimenet:

Funkció az összesítésben ()

Az summarize () ige kompatibilis az R szinte összes függvényével. Itt található egy rövid lista a hasznos függvényekről, amelyeket az summarize () -vel együtt használhat:

Célkitűzés Funkció Leírás
Alapvető átlagos() Az x vektor átlaga
középső() Az x vektor mediánja
összeg() Az x vektor összege
variáció SD() az x vektor szórása
IQR () Az x vektor interkvartilis
Hatótávolság perc () Az x vektor minimuma
max () Az x vektor maximuma
kvantilis () Az x vektor kvantilis
Pozíció első() Használja a group_by () használatával A csoport első megfigyelése
utolsó() Használja a group_by () paranccsal. A csoport utolsó megfigyelése
n. () Használja a group_by () paranccsal. a csoport n-edik megfigyelése
Számol n () Használja a group_by () paranccsal. Számolja meg a sorok számát
n_distinct () Használja a group_by () paranccsal. Számolja meg a különféle megfigyelések számát

Az 1. táblázat minden funkciójára példákat fogunk látni.

Alapfunkció

Az előző példában az összefoglaló statisztikát nem egy adatkeretben tárolta.

Két lépésben folytathatja a dátumkeret létrehozását az összefoglalásból:

  • 1. lépés: Tárolja az adatkeretet további felhasználás céljából
  • 2. lépés: Használja az adatkészletet vonaldiagram létrehozásához

1. lépés: Kiszámítja a lejátszott játékok átlagos számát évenként.

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

Kód Magyarázat

  • Az ütőképes adatkészlet összefoglaló statisztikáját az ex1 adatkeret tárolja.

Kimenet:

## # 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. lépés: Megmutatja az összefoglaló statisztikát vonaldiagrammal, és látja a trendet.

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

Kimenet:

Előfizetés

Az summarize () függvény kompatibilis az albeállításokkal.

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

Kód Magyarázat

  • medián_at_bat_league_no_zero = medián (AB [AB> 0]): Az AB változó sok 0- at tartalmaz. Összehasonlíthatja az at den változó mediánját 0-val és anélkül.

Kimenet:

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

Összeg

A változó összesítésének másik hasznos függvénye az összeg ().

Ellenőrizheti, hogy melyik bajnokságban van több házifutás.

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

Kimenet:

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

Szórás

Az adatok terjedését az R szórásával vagy az sd () értékkel számoljuk.

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

Kimenet:

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

Sok egyenlőtlenség tapasztalható az egyes csapatok által elvégzett házi futások mennyiségében.

Minimum és maximum

A vektor minimumát és maximumát a min () és max () függvényekkel érheti el.

Az alábbi kód a legalacsonyabb és legnagyobb számú játékot adja vissza egy játékos által lejátszott szezonban.

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

Kimenet:

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

Számol

A megfigyelések csoportonkénti megszámlálása mindig jó ötlet. R-vel összesítheti az előfordulás számát n () -nel.

Például az alábbi kód kiszámítja az egyes játékosok által játszott évek számát.

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

Kimenet:

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

Első és utolsó

Kiválaszthatja a csoport első, utolsó vagy n-edik pozícióját.

Megtalálhatja például az egyes játékosok első és utolsó évét.

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

Kimenet:

## # 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-edik megfigyelés

Az n-edik () függvény kiegészíti az elsőt () és az utolsót (). A csoporton belül az n-edik megfigyeléshez a visszatérő indexhez férhet hozzá.

Például csak a csapat második évét szűrheti.

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

Kimenet:

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

Megkülönböztetett megfigyelési szám

Az n () függvény visszaadja az aktuális csoport megfigyeléseinek számát. Az n () függvény zárt függvénye az n_distinct (), amely megszámolja az egyedi értékek számát.

A következő példában összeadja azon csapatok összes játékosát, akiket az összes időszakban beszerveztek.

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

Kód Magyarázat

  • group_by (teamID): Csoportosítás év és csapat szerint
  • összesítés (szám_játékos = n_különbség (játékosazonosító)): Számolja meg a játékosok számát csapatonként
  • rendez (desc (number_player)): Az adatok rendezése a játékosok száma szerint

Kimenet:

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

Több csoport

Összefoglaló statisztika több csoport között is megvalósítható.

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

Kód Magyarázat

  • group_by (évID, teamID): Csoportosítás év és csapat szerint
  • összesítés (átlag_játékok = átlag (G)): Összefoglalva a játékosok számát
  • rendez (desc (teamID, yearID)): Rendezze az adatokat csapat és év szerint

Kimenet:

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

Szűrő

Mielőtt műveletet kíván végrehajtani, szűrheti az adatkészletet. Az adatkészlet 1871-ben kezdődik, és az elemzéshez nincs szükség az 1980 előtti évekre.

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

Kód Magyarázat

  • szűrő (évID> 1980): Szűrje az adatokat, hogy csak a releváns éveket jelenítse meg (azaz 1980 után)
  • group_by (yearID): Csoportosítás évenként
  • összesítés (átlagos_játék_év = átlag (G)): Összegezze az adatokat

Kimenet:

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

Csoportosítás megszüntetése

Végül, de nem utolsósorban el kell távolítania a csoportosítást, mielőtt módosítani szeretné a számítás szintjét.

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

Kód Magyarázat

  • szűrő (HR> 0): A nulla homerun kizárása
  • group_by (playerID): csoportosítás játékosok szerint
  • összesítés (átlagos_HR_játék = összeg (HR) / összeg (G)): Számítsd ki az átlagos otthoni futást játékosonként
  • ungroup (): a csoportosítás eltávolítása
  • összesítés (összes_átlagos_homerun = átlag (átlagos_HR_játék)): Összegezze az adatokat

Kimenet:

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

Összegzés

Ha összefoglalót szeretne visszaadni csoportonként, használhatja:

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

le kell bontanod az adatokat a következőkkel:

ungroup(df) 

Az alábbi táblázat összefoglalja azt a funkciót, amelyet megtanult az összesítéssel ()

módszer

funkció

kód

átlagos

átlagos

summarise(df,mean_x1 = mean(x1))

középső

középső

summarise(df,median_x1 = median(x1))

összeg

összeg

summarise(df,sum_x1 = sum(x1))

szórás

SD

summarise(df,sd_x1 = sd(x1))

interkvartilis

IQR

summarise(df,interquartile_x1 = IQR(x1))

minimális

min

summarise(df,minimum_x1 = min(x1))

maximális

max

summarise(df,maximum_x1 = max(x1))

kvantilis

kvantilis

summarise(df,quantile_x1 = quantile(x1))

első megfigyelés

első

summarise(df,first_x1 = first(x1))

utolsó megfigyelés

utolsó

summarise(df,last_x1 = last(x1))

n-edik megfigyelés

n

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

előfordulás száma

n

summarise(df,n_x1 = n(x1))

különálló előfordulás száma

n_distinct

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