F Agregat Fungsi: Ringkaskan & Kumpulan_by () Contoh

Isi kandungan:

Anonim

Ringkasan pemboleh ubah penting untuk mempunyai idea mengenai data. Walaupun, meringkaskan pemboleh ubah mengikut kumpulan memberikan maklumat yang lebih baik mengenai pengedaran data.

Dalam tutorial ini, anda akan belajar bagaimana meringkaskan set data mengikut kumpulan dengan perpustakaan dplyr.

Dalam tutorial ini, anda akan belajar

  • Ringkaskan ()
  • Group_by vs no group_by
  • Fungsi secara ringkas ()
  • Fungsi asas
  • Penetapan
  • Jumlah
  • Sisihan piawai
  • Minimum dan maksimum
  • Kira
  • Pertama dan terakhir
  • pemerhatian ke-9
  • Berbilang kumpulan
  • Tapis
  • Tidak berkumpulan

Untuk tutorial ini, anda akan menggunakan kumpulan data batting. Set data asal mengandungi 102816 pemerhatian dan 22 pemboleh ubah. Anda hanya akan menggunakan 20 peratus daripada set data ini dan menggunakan pemboleh ubah berikut:

  • playerID: Kod ID pemain. Faktor
  • yearID: Tahun. Faktor
  • teamID: Pasukan. faktor
  • lgID: Liga. Faktor: AA AL FL NL PL UA
  • AB: Pada kelawar. Berangka
  • G: Permainan: bilangan permainan oleh pemain. Berangka
  • R: Berlari. Berangka
  • HR: Homerun. Berangka
  • SH: Hit pengorbanan. Berangka

Sebelum melakukan ringkasan, anda akan melakukan langkah-langkah berikut untuk menyediakan data:

  • Langkah 1: Import data
  • Langkah 2: Pilih pemboleh ubah yang berkaitan
  • Langkah 3: Isih data
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)

Amalan yang baik semasa anda mengimport set data adalah dengan menggunakan fungsi sekilas () untuk mempunyai idea mengenai struktur set data.

# Structure of the dataglimpse(data)

Pengeluaran:

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

Ringkaskan ()

Sintaks ringkasan () adalah asas dan konsisten dengan kata kerja lain yang termasuk dalam perpustakaan dplyr.

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

Lihat kod di bawah:

summarise(data, mean_run =mean(R))

Penjelasan Kod

  • meringkaskan (data, mean_run = mean (R)): Membuat pemboleh ubah bernama mean_run yang merupakan purata lajur yang dijalankan dari data set data.

Pengeluaran:

## mean_run## 1 19.20114

Anda boleh menambah sebilangan pemboleh ubah yang anda mahukan. Anda mengembalikan permainan rata-rata yang dimainkan dan purata pengorbanan.

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

Penjelasan Kod

  • mean_SH = mean (SH, na.rm = TRUE): Ringkaskan pemboleh ubah kedua. Anda menetapkan na.rm = TRUE kerana lajur SH mengandungi pemerhatian yang hilang.

Pengeluaran:

## mean_games mean_SH## 1 51.98361 2.340085 

Group_by vs no group_by

Fungsi summerise () tanpa group_by () tidak masuk akal. Ia membuat statistik ringkasan mengikut kumpulan. Perpustakaan dplyr menerapkan fungsi secara automatik pada kumpulan yang anda lalui di dalam kata kerja group_by.

Perhatikan bahawa, group_by berfungsi dengan sempurna dengan semua kata kerja lain (iaitu mutate (), filter (), susun (),…).

Lebih senang menggunakan operator saluran paip apabila anda mempunyai lebih dari satu langkah. Anda boleh mengira homerun rata-rata dengan liga besbol.

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

Penjelasan Kod

  • data: Set data yang digunakan untuk membina statistik ringkasan
  • group_by (lgID): Hitung ringkasan dengan mengelompokkan pemboleh ubah `lgID
  • meringkaskan (mean_run = mean (HR)): Hitung rata-rata homerun

Pengeluaran:

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

Pengendali paip berfungsi dengan ggplot () juga. Anda dapat dengan mudah menunjukkan statistik ringkasan dengan grafik. Semua langkah didorong ke dalam saluran paip sehingga cengkeramannya tergambar. Nampaknya lebih visual untuk melihat homerun rata-rata dengan liga dengan bar bar. Kod di bawah menunjukkan kehebatan menggabungkan group_by (), meringkaskan () dan ggplot () bersama.

Anda akan melakukan langkah berikut:

  • Langkah 1: Pilih bingkai data
  • Langkah 2: Data kumpulan
  • Langkah 3: Ringkaskan data
  • Langkah 4: Buat statistik ringkasan
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()"))

Pengeluaran:

Fungsi secara ringkas ()

Ringkasan kata kerja () sesuai dengan hampir semua fungsi di R. Berikut adalah senarai pendek fungsi berguna yang boleh anda gunakan bersama dengan ringkasan ():

Objektif Fungsi Penerangan
Asas bermaksud () Purata vektor x
median () Median vektor x
jumlah () Jumlah vektor x
variasi sd () sisihan piawai vektor x
IQR () Interquartile vektor x
Julat min () Minimum vektor x
maks () Maksimum vektor x
kuantil () Kuantil vektor x
Kedudukan pertama () Gunakan dengan group_by () Pemerhatian pertama kumpulan
terakhir () Gunakan dengan group_by (). Pemerhatian terakhir kumpulan
ke-9 () Gunakan dengan group_by (). pemerhatian ke-9 kumpulan
Kira n () Gunakan dengan group_by (). Hitung bilangan baris
n_berbeza () Gunakan dengan group_by (). Hitung bilangan pemerhatian yang berbeza

Kami akan melihat contoh untuk setiap fungsi jadual 1.

Fungsi asas

Dalam contoh sebelumnya, anda tidak menyimpan statistik ringkasan dalam kerangka data.

Anda boleh meneruskan dalam dua langkah untuk menghasilkan kerangka tarikh dari ringkasan:

  • Langkah 1: Simpan bingkai data untuk penggunaan selanjutnya
  • Langkah 2: Gunakan set data untuk membuat plot garis

Langkah 1) Anda menghitung jumlah purata permainan yang dimainkan setiap tahun.

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

Penjelasan Kod

  • Ringkasan statistik kumpulan data pemukul disimpan dalam kerangka data ex1.

Pengeluaran:

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

Langkah 2) Anda menunjukkan statistik ringkasan dengan plot garis dan melihat trendnya.

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

Pengeluaran:

Penetapan

Ringkasan fungsi () serasi dengan 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]))

Penjelasan Kod

  • median_at_bat_league_no_zero = median (AB [AB> 0]): Pemboleh ubah AB mengandungi banyak 0. Anda boleh membandingkan median pemboleh ubah at kelawar dengan dan tanpa 0.

Pengeluaran:

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

Jumlah

Fungsi lain yang berguna untuk mengagregatkan pemboleh ubah adalah jumlah ().

Anda boleh menyemak liga mana yang mempunyai lebih banyak homerun.

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

Pengeluaran:

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

Sisihan piawai

Penyebaran data dikira dengan sisihan piawai atau sd () dalam R.

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

Pengeluaran:

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

Terdapat banyak ketidaksamaan dalam jumlah homerun yang dilakukan oleh setiap pasukan.

Minimum dan maksimum

Anda boleh mengakses minimum dan maksimum vektor dengan fungsi min () dan max ().

Kod di bawah mengembalikan jumlah permainan terendah dan tertinggi dalam musim yang dimainkan oleh pemain.

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

Pengeluaran:

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

Kira

Hitung pemerhatian mengikut kumpulan selalu merupakan idea yang baik. Dengan R, anda dapat mengumpulkan jumlah kejadian dengan n ().

Contohnya, kod di bawah ini mengira bilangan tahun yang dimainkan oleh setiap pemain.

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

Pengeluaran:

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

Pertama dan terakhir

Anda boleh memilih kedudukan pertama, terakhir atau ke-9 kumpulan.

Contohnya, anda boleh menemui tahun pertama dan terakhir setiap pemain.

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

Pengeluaran:

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

pemerhatian ke-9

Fungsi nth () adalah pelengkap kepada pertama () dan terakhir (). Anda boleh mengakses pemerhatian ke-9 dalam kumpulan dengan indeks untuk kembali.

Sebagai contoh, anda boleh menyaring hanya tahun kedua pasukan bermain.

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

Pengeluaran:

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

Bilangan pemerhatian yang berbeza

Fungsi n () mengembalikan bilangan pemerhatian dalam kumpulan semasa. Fungsi tertutup ke n () adalah n_distinct (), yang mengira bilangan nilai unik.

Dalam contoh seterusnya, anda menambah jumlah pemain yang direkrut oleh pasukan sepanjang tempoh tersebut.

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

Penjelasan Kod

  • group_by (teamID): Kumpulan mengikut tahun dan pasukan
  • meringkaskan (number_player = n_distinct (playerID)): Hitung bilangan pemain yang berbeza mengikut pasukan
  • susun (desc (number_player)): Susun data mengikut bilangan pemain

Pengeluaran:

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

Berbilang kumpulan

Statistik ringkasan dapat direalisasikan di antara pelbagai kumpulan.

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

Penjelasan Kod

  • group_by (yearID, teamID): Kumpulan mengikut tahun dan pasukan
  • meringkaskan (mean_games = mean (G)): Meringkaskan bilangan pemain permainan
  • susun (desc (teamID, yearID)): Susun data mengikut pasukan dan tahun

Pengeluaran:

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

Tapis

Sebelum anda bermaksud melakukan operasi, anda boleh menapis set data. Set data bermula pada tahun 1871, dan analisisnya tidak memerlukan tahun-tahun sebelum 1980.

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

Penjelasan Kod

  • filter (yearID> 1980): Tapis data untuk menunjukkan hanya tahun-tahun yang berkaitan (iaitu selepas tahun 1980)
  • group_by (yearID): Kumpulan mengikut tahun
  • meringkaskan (mean_game_year = mean (G)): Ringkaskan data

Pengeluaran:

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

Tidak berkumpulan

Akhir sekali, anda perlu membuang pengelompokan sebelum anda mahu mengubah tahap pengiraan.

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

Penjelasan Kod

  • filter (HR> 0): Kecualikan homerun sifar
  • group_by (playerID): kumpulan mengikut pemain
  • ringkaskan (rata-rata_HR_game = jumlah (HR) / jumlah (G)): Hitung rata-rata homerun mengikut pemain
  • ungroup (): keluarkan pengelompokan
  • meringkaskan (total_average_homerun = min (rata-rata_HR_game)): Ringkaskan data

Pengeluaran:

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

Ringkasan

Apabila anda ingin mengembalikan ringkasan mengikut kumpulan, anda boleh menggunakan:

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

anda perlu membongkar data dengan:

ungroup(df) 

Jadual di bawah meringkaskan fungsi yang anda pelajari dengan meringkaskan ()

kaedah

fungsi

kod

bermaksud

bermaksud

summarise(df,mean_x1 = mean(x1))

median

median

summarise(df,median_x1 = median(x1))

jumlah

jumlah

summarise(df,sum_x1 = sum(x1))

sisihan piawai

sd

summarise(df,sd_x1 = sd(x1))

interquartile

IQR

summarise(df,interquartile_x1 = IQR(x1))

minimum

min

summarise(df,minimum_x1 = min(x1))

maksimum

maks

summarise(df,maximum_x1 = max(x1))

kuantil

kuantil

summarise(df,quantile_x1 = quantile(x1))

pemerhatian pertama

pertama

summarise(df,first_x1 = first(x1))

pemerhatian terakhir

terakhir

summarise(df,last_x1 = last(x1))

pemerhatian ke-9

nth

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

bilangan kejadian

n

summarise(df,n_x1 = n(x1))

bilangan kejadian yang berbeza

n_berbeza

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