Fungsi Agregat R: Meringkas & Group_by () Contoh

Daftar Isi:

Anonim

Ringkasan variabel penting untuk mendapatkan gambaran tentang data. Meskipun, meringkas variabel berdasarkan kelompok memberikan informasi yang lebih baik tentang distribusi data.

Dalam tutorial ini, Anda akan belajar bagaimana meringkas kumpulan data menurut grup dengan pustaka dplyr.

Dalam tutorial ini, Anda akan belajar

  • Meringkaskan()
  • Group_by vs tidak group_by
  • Fungsi di summarize ()
  • Fungsi dasar
  • Subset
  • Jumlah
  • Simpangan baku
  • Minimal dan maksimal
  • Menghitung
  • Pertama dan terakhir
  • observasi ke-n
  • Banyak kelompok
  • Saring
  • Pisahkan

Untuk tutorial ini, Anda akan menggunakan dataset batting. Dataset asli berisi 102816 observasi dan 22 variabel. Anda hanya akan menggunakan 20 persen dari kumpulan data ini dan menggunakan variabel berikut:

  • playerID: Kode ID Pemain. Faktor
  • yearID: Tahun. Faktor
  • teamID: Tim. faktor
  • lgID: Liga. Faktor: AA AL FL NL PL UA
  • AB: Pada kelelawar. Numerik
  • G: Games: jumlah permainan oleh seorang pemain. Numerik
  • R: Berlari. Numerik
  • HR: Homeruns. Numerik
  • SH: Korban hits. Numerik

Sebelum Anda melakukan ringkasan, Anda akan melakukan langkah-langkah berikut untuk menyiapkan data:

  • Langkah 1: Impor data
  • Langkah 2: Pilih variabel yang relevan
  • Langkah 3: Sortir 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)

Praktik yang baik saat Anda mengimpor kumpulan data adalah dengan menggunakan fungsi glimpse () untuk mendapatkan gambaran tentang struktur kumpulan data.

# Structure of the dataglimpse(data)

Keluaran:

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

Meringkaskan()

Sintaks dari summarize () adalah dasar dan konsisten dengan kata kerja lain yang termasuk dalam pustaka 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 kode di bawah ini:

summarise(data, mean_run =mean(R))

Penjelasan Kode

  • meringkas (data, mean_run = mean (R)): Membuat variabel bernama mean_run yang merupakan rata-rata kolom yang dijalankan dari data dataset.

Keluaran:

## mean_run## 1 19.20114

Anda dapat menambahkan variabel sebanyak yang Anda inginkan. Anda mengembalikan rata-rata permainan yang dimainkan dan pengorbanan rata-rata hit.

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

Penjelasan Kode

  • mean_SH = mean (SH, na.rm = TRUE): Ringkas variabel kedua. Anda menetapkan na.rm = TRUE karena kolom SH berisi observasi yang hilang.

Keluaran:

## mean_games mean_SH## 1 51.98361 2.340085 

Group_by vs tidak group_by

Fungsi summerise () tanpa group_by () tidak masuk akal. Ini membuat statistik ringkasan oleh kelompok. Library dplyr menerapkan fungsi secara otomatis ke grup yang Anda berikan di dalam kata kerja group_by.

Perhatikan bahwa, group_by bekerja sempurna dengan semua kata kerja lainnya (yaitu mutate (), filter (), mengatur (),…).

Akan lebih mudah menggunakan operator jalur pipa bila Anda memiliki lebih dari satu langkah. Anda dapat menghitung homerun rata-rata berdasarkan liga bisbol.

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

Penjelasan Kode

  • data: Set data yang digunakan untuk membuat statistik ringkasan
  • group_by (lgID): Menghitung ringkasan dengan mengelompokkan variabel `lgID
  • meringkas (mean_run = mean (HR)): Hitung rata-rata homerun

Keluaran:

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

Operator pipa juga bekerja dengan ggplot (). Anda dapat dengan mudah menampilkan statistik ringkasan dengan grafik. Semua langkah didorong ke dalam pipeline sampai grap menjadi plot. Tampaknya lebih visual untuk melihat homerun rata-rata berdasarkan liga dengan karakter bar. Kode di bawah ini menunjukkan kekuatan menggabungkan group_by (), summarize () dan ggplot () bersama-sama.

Anda akan melakukan langkah berikut:

  • Langkah 1: Pilih bingkai data
  • Langkah 2: Kelompokkan data
  • Langkah 3: Buat ringkasan data
  • Langkah 4: Buat grafik ringkasan 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()"))

Keluaran:

Fungsi di summarize ()

Kata kerja summarize () kompatibel dengan hampir semua fungsi di R. Berikut adalah daftar singkat fungsi berguna yang dapat Anda gunakan bersama dengan summarize ():

Objektif Fungsi Deskripsi
Dasar berarti() Rata-rata vektor x
median () Median vektor x
jumlah() Jumlah vektor x
variasi sd () deviasi standar vektor x
IQR () Interkuartil dari vektor x
Jarak min () Minimal vektor x
maks () Maksimum vektor x
kuantil () Kuantil vektor x
Posisi pertama() Gunakan dengan group_by () Pengamatan pertama kelompok
terakhir() Gunakan dengan group_by (). Pengamatan terakhir kelompok
ke-n () Gunakan dengan group_by (). observasi ke-n kelompok
Menghitung n () Gunakan dengan group_by (). Hitung jumlah baris
n_distinct () Gunakan dengan group_by (). Hitung jumlah pengamatan berbeda

Kita akan melihat contoh untuk setiap fungsi tabel 1.

Fungsi dasar

Pada contoh sebelumnya, Anda tidak menyimpan statistik ringkasan dalam bingkai data.

Anda dapat melanjutkan dalam dua langkah untuk menghasilkan kerangka tanggal dari ringkasan:

  • Langkah 1: Simpan bingkai data untuk digunakan lebih lanjut
  • Langkah 2: Gunakan dataset untuk membuat plot garis

Langkah 1) Anda menghitung jumlah rata-rata game yang dimainkan menurut tahun.

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

Penjelasan Kode

  • Statistik ringkasan dari dataset batting disimpan dalam bingkai data ex1.

Keluaran:

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

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

Keluaran:

Subset

Fungsi summarize () kompatibel dengan subsetting.

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

  • median_at_bat_league_no_zero = median (AB [AB> 0]): Variabel AB berisi banyak 0. Anda dapat membandingkan median variabel at bat dengan dan tanpa 0.

Keluaran:

## # 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 menggabungkan variabel adalah sum ().

Anda dapat memeriksa liga mana yang memiliki lebih banyak homerun.

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

Keluaran:

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

Simpangan baku

Penyebaran data dihitung dengan standar deviasi atau sd () di R.

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

Keluaran:

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

Ada banyak ketimpangan dalam kuantitas homerun yang dilakukan oleh masing-masing tim.

Minimal dan maksimal

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

Kode di bawah ini mengembalikan jumlah permainan terendah dan tertinggi dalam satu musim yang dimainkan oleh seorang pemain.

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

Keluaran:

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

Menghitung

Hitung pengamatan menurut kelompok selalu merupakan ide yang bagus. Dengan R, Anda dapat menggabungkan jumlah kemunculan dengan n ().

Misalnya, kode di bawah ini menghitung jumlah tahun yang dimainkan oleh setiap pemain.

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

Keluaran:

## # 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 dapat memilih posisi pertama, terakhir atau n dari grup.

Misalnya, Anda dapat menemukan tahun pertama dan terakhir setiap pemain.

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

Keluaran:

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

observasi ke-n

Fonction nth () melengkapi first () dan last (). Anda dapat mengakses observasi ke-n dalam grup dengan indeks untuk dikembalikan.

Misalnya, Anda hanya dapat memfilter tahun kedua tim bermain.

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

Keluaran:

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

Jumlah pengamatan yang berbeda

Fungsi n () mengembalikan jumlah observasi dalam grup saat ini. Fungsi tertutup ke n () adalah n_distinct (), yang menghitung jumlah nilai unik.

Dalam contoh berikutnya, Anda menjumlahkan total pemain yang direkrut tim selama semua periode.

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

Penjelasan Kode

  • group_by (teamID): Kelompok berdasarkan tahun dan tim
  • ringkasan (number_player = n_distinct (playerID)): Hitung jumlah pemain yang berbeda menurut tim
  • mengatur (desc (number_player)): Mengurutkan data berdasarkan jumlah pemain

Keluaran:

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

Banyak kelompok

Statistik ringkasan dapat direalisasikan di antara banyak kelompok.

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

Penjelasan Kode

  • group_by (yearID, teamID): Kelompok berdasarkan tahun dan tim
  • meringkas (mean_games = mean (G)): Meringkas jumlah pemain game
  • mengatur (desc (teamID, yearID)): Mengurutkan data berdasarkan tim dan tahun

Keluaran:

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

Saring

Sebelum Anda berniat melakukan suatu operasi, Anda dapat memfilter dataset. Dataset dimulai pada tahun 1871, dan analisis tidak memerlukan tahun-tahun sebelum 1980.

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

Penjelasan Kode

  • filter (yearID> 1980): Filter data untuk menampilkan hanya tahun yang relevan (yaitu setelah 1980)
  • group_by (yearID): Kelompok menurut tahun
  • meringkas (mean_game_year = mean (G)): Meringkas data

Keluaran:

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

Pisahkan

Last but not least, Anda perlu menghapus pengelompokan sebelum Anda ingin mengubah level komputasi.

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

  • filter (HR> 0): Kecualikan nol homerun
  • group_by (playerID): kelompok demi pemain
  • meringkas (average_HR_game = sum (HR) / sum (G)): Menghitung homerun rata-rata oleh pemain
  • ungroup (): hapus pengelompokan
  • meringkas (total_average_homerun = mean (average_HR_game)): Meringkas data

Keluaran:

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

Ringkasan

Saat Anda ingin mengembalikan ringkasan menurut grup, Anda bisa menggunakan:

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

Anda perlu memisahkan data dengan:

ungroup(df) 

Tabel di bawah ini meringkas fungsi yang Anda pelajari dengan summarize ()

metode

fungsi

kode

berarti

berarti

summarise(df,mean_x1 = mean(x1))

median

median

summarise(df,median_x1 = median(x1))

jumlah

jumlah

summarise(df,sum_x1 = sum(x1))

deviasi standar

sd

summarise(df,sd_x1 = sd(x1))

interkuartil

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

observasi pertama

pertama

summarise(df,first_x1 = first(x1))

pengamatan terakhir

terakhir

summarise(df,last_x1 = last(x1))

observasi ke-n

nth

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

jumlah kejadian

n

summarise(df,n_x1 = n(x1))

jumlah kejadian yang berbeda

n_distinct

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