R apkopotā funkcija: apkopojiet & Group_by () Piemērs

Satura rādītājs:

Anonim

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

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