Muhammad Luqman 2018-04-21
Dengan menggunakan R, kita dapat melakukan berbagai jenis manipulasi data dengan cepat. Manipulasi data biasa dilakukan pada data yang akan dianalisis untuk mendapatkan berbagai gambaran deskriptif awal terhadap data yang digunakan sebelum dianalisis lebih jauh. Berbagai manipulasi data yang biasa dilakukan adalah sebagai berikut :
- Memilih Kolom Tertentu
- Memilih Baris Tertentu
- Merubah Susunan Baris
- Membuat Kolom Baru
- Membuat Rangkuman Data
- Manipulasi Data Berdasarkan Grup
Dalam pertemuan kali ini, kita akan menggunakan dataset Houston Flights
data yang diambil dari package hflights
. Dataset ini berisi catatan
tentang semua penerbangan dari bandara Houston Hobby dan George Bush
Intercontinental.
install.packages('hflights')
library(hflights)
head(hflights, n = 10)
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 5424 2011 1 1 6 1400 1500 AA 428
## 5425 2011 1 2 7 1401 1501 AA 428
## 5426 2011 1 3 1 1352 1502 AA 428
## 5427 2011 1 4 2 1403 1513 AA 428
## 5428 2011 1 5 3 1405 1507 AA 428
## 5429 2011 1 6 4 1359 1503 AA 428
## 5430 2011 1 7 5 1359 1509 AA 428
## 5431 2011 1 8 6 1355 1454 AA 428
## 5432 2011 1 9 7 1443 1554 AA 428
## 5433 2011 1 10 1 1443 1553 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 5424 N576AA 60 40 -10 0 IAH DFW 224
## 5425 N557AA 60 45 -9 1 IAH DFW 224
## 5426 N541AA 70 48 -8 -8 IAH DFW 224
## 5427 N403AA 70 39 3 3 IAH DFW 224
## 5428 N492AA 62 44 -3 5 IAH DFW 224
## 5429 N262AA 64 45 -7 -1 IAH DFW 224
## 5430 N493AA 70 43 -1 -1 IAH DFW 224
## 5431 N477AA 59 40 -16 -5 IAH DFW 224
## 5432 N476AA 71 41 44 43 IAH DFW 224
## 5433 N504AA 70 45 43 43 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 7 13 0 0
## 5425 6 9 0 0
## 5426 5 17 0 0
## 5427 9 22 0 0
## 5428 9 9 0 0
## 5429 6 13 0 0
## 5430 12 15 0 0
## 5431 7 12 0 0
## 5432 8 22 0 0
## 5433 6 19 0 0
class(hflights)
## [1] "data.frame"
Manipulasi data dapat dilakukan dengan menggunakan base
R sekalipun.
Manipulasi data menggunakan base
R memerlukan pemahaman terhadap
teknik-teknik yang sebelumnya diajarkan pada Pertemuan 1 dan
Pertemuan 2. Meski demikian, manipulasi data terkadang memerlukan
penulisan syntax yang cukup banyak dan akan sulit untuk dimengerti
oleh orang lain.
Package dplyr
menawarkan kemudahan untuk melakukan manipulasi data
dalam R sekaligus mempermudah penulisan syntax yang diperlukan. Dengan
menggunakan dplyr
, manipulasi data dapat dilakukan dengan lebih cepat
dengan syntax sederhana yang lebih mudah dimengerti oleh orang lain.
Package dplyr
menawarkan fungsi - fungsi manipulasi data (atau lebih
dikenal verbs). Beberapa verbs yang akan dipelajari dalam pertemuan
ini adalah
select()
: memilih kolom tertentufilter()
: memilih baris tertentuarrange()
: merubah susunan barismutate()
: membuat kolom baru dari data yang adasummarise()
: membuat rangkuman datagroup_by()
: melakukan manipulasi data berdasarkan group tertentu
Pada pertemuan ini, kita akan melakukan beberapa manipulasi data baik
tanpa menggunakan maupun menggunakan dplyr
dan membandingkan hasilnya.
Sebelum memulai manipulasi data, kita akan mengenal terlebih dahulu
mengenai pipe operator (%>%
). Operator ini merupakan operator dari
package magritrr
yang memudahkan pengerjaan secara beruntun tanpa
perlu menumpuk penulisan fungsi. Inti dari operator ini adalah
mempermudah penulisan fungsi sehingga dapat terbaca dari kiri ke kanan,
bukan dari dalam keluar seperti yang biasa dilakukan ketika menumpuk
penulisan fungsi.
sum(as.numeric(c("3","9","10","5","6","9","10","2","37","9")))
## [1] 100
Dalam penulisan syntax diatas, kita menumpuk penggunaan fungsi c()
,
as.numeric()
dan sum()
dalam satu baris. Kita memahami output dari
fungsi diatas dengan membaca dari dalam keluar dengan terjemahan “buat
suatu vektor karakter, lalu ubah ke dalam bentuk numerik, lalu jumlahkan
hasilnya”. Dengan menggunakan operator %>%
, kita dapat menyusun
syntax diatas ke dalam bentuk yang lebih mudah dibaca seperti berikut
c("3","9","10","5","6","9","10","2","37","9") %>%
as.numeric() %>%
sum()
## [1] 100
Dengan menggunakan operator %>%
seperti contoh diatas, kita dapat
dengan lebih mudah memahami suatu syntax dimana syntax dapat ditulis
sesuai terjemahan aslinya yaitu “buat suatu vektor karakter, lalu ubah
ke dalam bentuk numerik, lalu jumlahkan hasilnya”.
head(hflights, n = 10) # dalam bentuk data.frame
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 5424 2011 1 1 6 1400 1500 AA 428
## 5425 2011 1 2 7 1401 1501 AA 428
## 5426 2011 1 3 1 1352 1502 AA 428
## 5427 2011 1 4 2 1403 1513 AA 428
## 5428 2011 1 5 3 1405 1507 AA 428
## 5429 2011 1 6 4 1359 1503 AA 428
## 5430 2011 1 7 5 1359 1509 AA 428
## 5431 2011 1 8 6 1355 1454 AA 428
## 5432 2011 1 9 7 1443 1554 AA 428
## 5433 2011 1 10 1 1443 1553 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 5424 N576AA 60 40 -10 0 IAH DFW 224
## 5425 N557AA 60 45 -9 1 IAH DFW 224
## 5426 N541AA 70 48 -8 -8 IAH DFW 224
## 5427 N403AA 70 39 3 3 IAH DFW 224
## 5428 N492AA 62 44 -3 5 IAH DFW 224
## 5429 N262AA 64 45 -7 -1 IAH DFW 224
## 5430 N493AA 70 43 -1 -1 IAH DFW 224
## 5431 N477AA 59 40 -16 -5 IAH DFW 224
## 5432 N476AA 71 41 44 43 IAH DFW 224
## 5433 N504AA 70 45 43 43 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 7 13 0 0
## 5425 6 9 0 0
## 5426 5 17 0 0
## 5427 9 22 0 0
## 5428 9 9 0 0
## 5429 6 13 0 0
## 5430 12 15 0 0
## 5431 7 12 0 0
## 5432 8 22 0 0
## 5433 6 19 0 0
library(dplyr)
hflights_tbl = as_tibble(hflights) # ubah ke dalam bentuk tbl
hflights_tbl
## # A tibble: 227,496 × 21
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## <int> <int> <int> <int> <int> <int> <chr> <int>
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 2 7 1401 1501 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## 7 2011 1 7 5 1359 1509 AA 428
## 8 2011 1 8 6 1355 1454 AA 428
## 9 2011 1 9 7 1443 1554 AA 428
## 10 2011 1 10 1 1443 1553 AA 428
## # ℹ 227,486 more rows
## # ℹ 13 more variables: TailNum <chr>, ActualElapsedTime <int>, AirTime <int>,
## # ArrDelay <int>, DepDelay <int>, Origin <chr>, Dest <chr>, Distance <int>,
## # TaxiIn <int>, TaxiOut <int>, Cancelled <int>, CancellationCode <chr>,
## # Diverted <int>
class(hflights_tbl)
## [1] "tbl_df" "tbl" "data.frame"
colnames(hflights_tbl) # melihat kolom yang tersedia (untuk pengertian : ?hflights)
## [1] "Year" "Month" "DayofMonth"
## [4] "DayOfWeek" "DepTime" "ArrTime"
## [7] "UniqueCarrier" "FlightNum" "TailNum"
## [10] "ActualElapsedTime" "AirTime" "ArrDelay"
## [13] "DepDelay" "Origin" "Dest"
## [16] "Distance" "TaxiIn" "TaxiOut"
## [19] "Cancelled" "CancellationCode" "Diverted"
str(hflights_tbl) # struktur dataset
## tibble [227,496 × 21] (S3: tbl_df/tbl/data.frame)
## $ Year : int [1:227496] 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 ...
## $ Month : int [1:227496] 1 1 1 1 1 1 1 1 1 1 ...
## $ DayofMonth : int [1:227496] 1 2 3 4 5 6 7 8 9 10 ...
## $ DayOfWeek : int [1:227496] 6 7 1 2 3 4 5 6 7 1 ...
## $ DepTime : int [1:227496] 1400 1401 1352 1403 1405 1359 1359 1355 1443 1443 ...
## $ ArrTime : int [1:227496] 1500 1501 1502 1513 1507 1503 1509 1454 1554 1553 ...
## $ UniqueCarrier : chr [1:227496] "AA" "AA" "AA" "AA" ...
## $ FlightNum : int [1:227496] 428 428 428 428 428 428 428 428 428 428 ...
## $ TailNum : chr [1:227496] "N576AA" "N557AA" "N541AA" "N403AA" ...
## $ ActualElapsedTime: int [1:227496] 60 60 70 70 62 64 70 59 71 70 ...
## $ AirTime : int [1:227496] 40 45 48 39 44 45 43 40 41 45 ...
## $ ArrDelay : int [1:227496] -10 -9 -8 3 -3 -7 -1 -16 44 43 ...
## $ DepDelay : int [1:227496] 0 1 -8 3 5 -1 -1 -5 43 43 ...
## $ Origin : chr [1:227496] "IAH" "IAH" "IAH" "IAH" ...
## $ Dest : chr [1:227496] "DFW" "DFW" "DFW" "DFW" ...
## $ Distance : int [1:227496] 224 224 224 224 224 224 224 224 224 224 ...
## $ TaxiIn : int [1:227496] 7 6 5 9 9 6 12 7 8 6 ...
## $ TaxiOut : int [1:227496] 13 9 17 22 9 13 15 12 22 19 ...
## $ Cancelled : int [1:227496] 0 0 0 0 0 0 0 0 0 0 ...
## $ CancellationCode : chr [1:227496] "" "" "" "" ...
## $ Diverted : int [1:227496] 0 0 0 0 0 0 0 0 0 0 ...
# tanpa menggunakan dplyr
head(hflights[, c(1,2,3,5,6)])
## Year Month DayofMonth DepTime ArrTime
## 5424 2011 1 1 1400 1500
## 5425 2011 1 2 1401 1501
## 5426 2011 1 3 1352 1502
## 5427 2011 1 4 1403 1513
## 5428 2011 1 5 1405 1507
## 5429 2011 1 6 1359 1503
head(hflights[, c("Year", "FlightNum", "TailNum", "Origin", "Dest")])
## Year FlightNum TailNum Origin Dest
## 5424 2011 428 N576AA IAH DFW
## 5425 2011 428 N557AA IAH DFW
## 5426 2011 428 N541AA IAH DFW
## 5427 2011 428 N403AA IAH DFW
## 5428 2011 428 N492AA IAH DFW
## 5429 2011 428 N262AA IAH DFW
head(hflights[, 17:20])
## TaxiIn TaxiOut Cancelled CancellationCode
## 5424 7 13 0
## 5425 6 9 0
## 5426 5 17 0
## 5427 9 22 0
## 5428 9 9 0
## 5429 6 13 0
head(hflights[, c("DepTime", "ArrTime", "ActualElapsedTime", "AirTime")])
## DepTime ArrTime ActualElapsedTime AirTime
## 5424 1400 1500 60 40
## 5425 1401 1501 60 45
## 5426 1352 1502 70 48
## 5427 1403 1513 70 39
## 5428 1405 1507 62 44
## 5429 1359 1503 64 45
# dengan menggunakan dplyr: select()
head(select(hflights_tbl, 1:6, -4))
## # A tibble: 6 × 5
## Year Month DayofMonth DepTime ArrTime
## <int> <int> <int> <int> <int>
## 1 2011 1 1 1400 1500
## 2 2011 1 2 1401 1501
## 3 2011 1 3 1352 1502
## 4 2011 1 4 1403 1513
## 5 2011 1 5 1405 1507
## 6 2011 1 6 1359 1503
head(select(hflights_tbl, Year, FlightNum, TailNum, Origin, Dest))
## # A tibble: 6 × 5
## Year FlightNum TailNum Origin Dest
## <int> <int> <chr> <chr> <chr>
## 1 2011 428 N576AA IAH DFW
## 2 2011 428 N557AA IAH DFW
## 3 2011 428 N541AA IAH DFW
## 4 2011 428 N403AA IAH DFW
## 5 2011 428 N492AA IAH DFW
## 6 2011 428 N262AA IAH DFW
head(select(hflights_tbl, TaxiIn:CancellationCode))
## # A tibble: 6 × 4
## TaxiIn TaxiOut Cancelled CancellationCode
## <int> <int> <int> <chr>
## 1 7 13 0 ""
## 2 6 9 0 ""
## 3 5 17 0 ""
## 4 9 22 0 ""
## 5 9 9 0 ""
## 6 6 13 0 ""
Package dplyr
menyediakan fungsi tambahan untuk membantu memilih kolom
yang diinginkan sebagai berikut
starts_with("x")
: memilih kolom yang dimulai dari “x”ends_with("x")
: memilih kolom yang diakhiri dengan “x”contains("x")
: memilih kolom yang mengandung “x”matches(regex)
: memilih kolom yang sesuai denganregex
tertentuone_off(columns)
: memilih kolom yang terdapat pada Vektorcolumns
tertentu
head(select(hflights_tbl, UniqueCarrier, ends_with("Time")))
## # A tibble: 6 × 5
## UniqueCarrier DepTime ArrTime ActualElapsedTime AirTime
## <chr> <int> <int> <int> <int>
## 1 AA 1400 1500 60 40
## 2 AA 1401 1501 60 45
## 3 AA 1352 1502 70 48
## 4 AA 1403 1513 70 39
## 5 AA 1405 1507 62 44
## 6 AA 1359 1503 64 45
col_name = c("UniqueCarrier", "TailNum", "AirTime", "Distance", "Random1", "Random2")
head(select(hflights_tbl, one_of(col_name)))
## Warning: Unknown columns: `Random1`, `Random2`
## # A tibble: 6 × 4
## UniqueCarrier TailNum AirTime Distance
## <chr> <chr> <int> <int>
## 1 AA N576AA 40 224
## 2 AA N557AA 45 224
## 3 AA N541AA 48 224
## 4 AA N403AA 39 224
## 5 AA N492AA 44 224
## 6 AA N262AA 45 224
# tanpa menggunakan dplyr
# 1. memilih penerbangan yang dibatalkan
head(hflights[hflights$Cancelled == 1, ])
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 33074 2011 1 24 1 NA NA AA 1700
## 35264 2011 1 9 7 NA NA AA 1820
## 63546 2011 1 11 2 NA NA B6 624
## 67826 2011 1 19 3 NA NA B6 624
## 72078 2011 1 27 4 NA NA B6 624
## 74874 2011 1 31 1 NA NA CO 442
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 33074 N3BGAA NA NA NA NA IAH MIA 964
## 35264 N4XCAA NA NA NA NA IAH DFW 224
## 63546 N537JB NA NA NA NA HOU JFK 1428
## 67826 N504JB NA NA NA NA HOU JFK 1428
## 72078 N569JB NA NA NA NA HOU JFK 1428
## 74874 NA NA NA NA IAH TUL 429
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 33074 NA NA 1 A 0
## 35264 NA NA 1 B 0
## 63546 NA NA 1 B 0
## 67826 NA NA 1 A 0
## 72078 NA NA 1 B 0
## 74874 NA NA 1 B 0
# 2. memilih penerbangan yang memiliki delay keberangkatan namun tetap datang lebih cepat
head(hflights[hflights$DepDelay > 0 & hflights$ArrDelay < 0, ])
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 5425 2011 1 2 7 1401 1501 AA 428
## 5428 2011 1 5 3 1405 1507 AA 428
## 5441 2011 1 18 2 1408 1508 AA 428
## 6360 2011 1 18 2 721 827 AA 460
## 8195 2011 1 12 3 2015 2113 AA 533
## 8196 2011 1 13 4 2020 2116 AA 533
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 5425 N557AA 60 45 -9 1 IAH DFW 224
## 5428 N492AA 62 44 -3 5 IAH DFW 224
## 5441 N507AA 60 42 -2 8 IAH DFW 224
## 6360 N558AA 66 46 -8 1 IAH DFW 224
## 8195 N555AA 58 39 -7 10 IAH DFW 224
## 8196 N4XCAA 56 44 -4 15 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5425 6 9 0 0
## 5428 9 9 0 0
## 5441 7 11 0 0
## 6360 7 13 0 0
## 8195 9 10 0 0
## 8196 4 8 0 0
# 3. memilih penerbangan yang dibatalkan karena masalah maskapai atau cuaca
head(hflights[hflights$CancellationCode %in% c("A", "B"), ])
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 33074 2011 1 24 1 NA NA AA 1700
## 35264 2011 1 9 7 NA NA AA 1820
## 63546 2011 1 11 2 NA NA B6 624
## 67826 2011 1 19 3 NA NA B6 624
## 72078 2011 1 27 4 NA NA B6 624
## 74874 2011 1 31 1 NA NA CO 442
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 33074 N3BGAA NA NA NA NA IAH MIA 964
## 35264 N4XCAA NA NA NA NA IAH DFW 224
## 63546 N537JB NA NA NA NA HOU JFK 1428
## 67826 N504JB NA NA NA NA HOU JFK 1428
## 72078 N569JB NA NA NA NA HOU JFK 1428
## 74874 NA NA NA NA IAH TUL 429
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 33074 NA NA 1 A 0
## 35264 NA NA 1 B 0
## 63546 NA NA 1 B 0
## 67826 NA NA 1 A 0
## 72078 NA NA 1 B 0
## 74874 NA NA 1 B 0
# 4. memilih dataset tanpa missing data(NA) di kolom tujuan
head(hflights[!is.na(hflights$Dest), ])
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 5424 2011 1 1 6 1400 1500 AA 428
## 5425 2011 1 2 7 1401 1501 AA 428
## 5426 2011 1 3 1 1352 1502 AA 428
## 5427 2011 1 4 2 1403 1513 AA 428
## 5428 2011 1 5 3 1405 1507 AA 428
## 5429 2011 1 6 4 1359 1503 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 5424 N576AA 60 40 -10 0 IAH DFW 224
## 5425 N557AA 60 45 -9 1 IAH DFW 224
## 5426 N541AA 70 48 -8 -8 IAH DFW 224
## 5427 N403AA 70 39 3 3 IAH DFW 224
## 5428 N492AA 62 44 -3 5 IAH DFW 224
## 5429 N262AA 64 45 -7 -1 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 7 13 0 0
## 5425 6 9 0 0
## 5426 5 17 0 0
## 5427 9 22 0 0
## 5428 9 9 0 0
## 5429 6 13 0 0
# dengan menggunakan dplyr: filter()
# 1. memilih penerbangan yang dibatalkan
head(filter(hflights_tbl, Cancelled == 1))
## # A tibble: 6 × 21
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## <int> <int> <int> <int> <int> <int> <chr> <int>
## 1 2011 1 24 1 NA NA AA 1700
## 2 2011 1 9 7 NA NA AA 1820
## 3 2011 1 11 2 NA NA B6 624
## 4 2011 1 19 3 NA NA B6 624
## 5 2011 1 27 4 NA NA B6 624
## 6 2011 1 31 1 NA NA CO 442
## # ℹ 13 more variables: TailNum <chr>, ActualElapsedTime <int>, AirTime <int>,
## # ArrDelay <int>, DepDelay <int>, Origin <chr>, Dest <chr>, Distance <int>,
## # TaxiIn <int>, TaxiOut <int>, Cancelled <int>, CancellationCode <chr>,
## # Diverted <int>
# 2. memilih penerbangan yang memiliki delay keberangkatan namun tetap datang lebih cepat
head(filter(hflights_tbl, DepDelay > 0, ArrDelay < 0))
## # A tibble: 6 × 21
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## <int> <int> <int> <int> <int> <int> <chr> <int>
## 1 2011 1 2 7 1401 1501 AA 428
## 2 2011 1 5 3 1405 1507 AA 428
## 3 2011 1 18 2 1408 1508 AA 428
## 4 2011 1 18 2 721 827 AA 460
## 5 2011 1 12 3 2015 2113 AA 533
## 6 2011 1 13 4 2020 2116 AA 533
## # ℹ 13 more variables: TailNum <chr>, ActualElapsedTime <int>, AirTime <int>,
## # ArrDelay <int>, DepDelay <int>, Origin <chr>, Dest <chr>, Distance <int>,
## # TaxiIn <int>, TaxiOut <int>, Cancelled <int>, CancellationCode <chr>,
## # Diverted <int>
# 3. memilih penerbangan yang dibatalkan karena masalah maskapai atau cuaca
head(filter(hflights_tbl, CancellationCode %in% c("A", "B")))
## # A tibble: 6 × 21
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## <int> <int> <int> <int> <int> <int> <chr> <int>
## 1 2011 1 24 1 NA NA AA 1700
## 2 2011 1 9 7 NA NA AA 1820
## 3 2011 1 11 2 NA NA B6 624
## 4 2011 1 19 3 NA NA B6 624
## 5 2011 1 27 4 NA NA B6 624
## 6 2011 1 31 1 NA NA CO 442
## # ℹ 13 more variables: TailNum <chr>, ActualElapsedTime <int>, AirTime <int>,
## # ArrDelay <int>, DepDelay <int>, Origin <chr>, Dest <chr>, Distance <int>,
## # TaxiIn <int>, TaxiOut <int>, Cancelled <int>, CancellationCode <chr>,
## # Diverted <int>
# 4. memilih dataset tanpa missing data(NA) di kolom tujuan
head(filter(hflights_tbl, !is.na(Dest)))
## # A tibble: 6 × 21
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## <int> <int> <int> <int> <int> <int> <chr> <int>
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 2 7 1401 1501 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## # ℹ 13 more variables: TailNum <chr>, ActualElapsedTime <int>, AirTime <int>,
## # ArrDelay <int>, DepDelay <int>, Origin <chr>, Dest <chr>, Distance <int>,
## # TaxiIn <int>, TaxiOut <int>, Cancelled <int>, CancellationCode <chr>,
## # Diverted <int>
# tanpa menggunakan dplyr
# 1. mengurutkan data berdasarkan nama maskapai secara alfabetis kemudian berdasarkan nomor ekor pesawat, lalu tampilkan kolom yang bersangkutan saja
head(hflights[order(hflights$UniqueCarrier, hflights$TailNum), c("UniqueCarrier", "TailNum")])
## UniqueCarrier TailNum
## 3065854 AA
## 4012227 AA
## 961571 AA N200AA
## 961591 AA N200AA
## 971458 AA N200AA
## 3039091 AA N200AA
# dengan menggunakan dplyr: arrange() dan pipe operator
# 1. mengurutkan data berdasarkan nama maskapai secara alfabetis kemudian berdasarkan nomor ekor pesawat, lalu tampilkan kolom yang bersangkutan saja
hflights_tbl %>%
select(UniqueCarrier, TailNum) %>%
arrange(UniqueCarrier, TailNum) %>%
head()
## # A tibble: 6 × 2
## UniqueCarrier TailNum
## <chr> <chr>
## 1 AA ""
## 2 AA ""
## 3 AA "N200AA"
## 4 AA "N200AA"
## 5 AA "N200AA"
## 6 AA "N200AA"
# 2. mengurutkan data berdasarkan delay keberangkatan terbesar kemudian berdasarkan jarak terkecil lalu tampilkan kolom yang bersangkutan saja
hflights_tbl %>%
select(DepDelay, Distance) %>%
arrange(desc(DepDelay), Distance) %>%
head()
## # A tibble: 6 × 2
## DepDelay Distance
## <int> <int>
## 1 981 3904
## 2 970 224
## 3 931 925
## 4 869 1635
## 5 814 925
## 6 803 247
# tanpa menggunakan dplyr
hflights$ActualGroundTime = hflights$ActualElapsedTime - hflights$AirTime
hflights$GroundTime = hflights$TaxiIn + hflights$TaxiOut
hflights$Speed = hflights$Distance / hflights$AirTime * 60
hflights$SpeedKm = hflights$Speed * 1.6
head(hflights[, c("ActualGroundTime", "GroundTime", "Speed", "SpeedKm")])
## ActualGroundTime GroundTime Speed SpeedKm
## 5424 20 20 336.0000 537.6000
## 5425 15 15 298.6667 477.8667
## 5426 22 22 280.0000 448.0000
## 5427 31 31 344.6154 551.3846
## 5428 18 18 305.4545 488.7273
## 5429 19 19 298.6667 477.8667
# dengan menggunakan dplyr: mutate() dan pipe operator
hflights_tbl = hflights_tbl %>%
mutate(ActualGroundTime = ActualElapsedTime - AirTime,
GroundTime = TaxiIn + TaxiOut, Speed = Distance / AirTime * 60,
SpeedKm = Speed * 1.6)
hflights_tbl %>%
select(contains("Ground"), contains("Speed")) %>%
head()
## # A tibble: 6 × 4
## ActualGroundTime GroundTime Speed SpeedKm
## <int> <int> <dbl> <dbl>
## 1 20 20 336 538.
## 2 15 15 299. 478.
## 3 22 22 280 448
## 4 31 31 345. 551.
## 5 18 18 305. 489.
## 6 19 19 299. 478.
# tanpa menggunakan dplyr
summary(hflights)
## Year Month DayofMonth DayOfWeek DepTime
## Min. :2011 Min. : 1.000 Min. : 1.00 Min. :1.000 Min. : 1
## 1st Qu.:2011 1st Qu.: 4.000 1st Qu.: 8.00 1st Qu.:2.000 1st Qu.:1021
## Median :2011 Median : 7.000 Median :16.00 Median :4.000 Median :1416
## Mean :2011 Mean : 6.514 Mean :15.74 Mean :3.948 Mean :1396
## 3rd Qu.:2011 3rd Qu.: 9.000 3rd Qu.:23.00 3rd Qu.:6.000 3rd Qu.:1801
## Max. :2011 Max. :12.000 Max. :31.00 Max. :7.000 Max. :2400
## NA's :2905
## ArrTime UniqueCarrier FlightNum TailNum
## Min. : 1 Length:227496 Min. : 1 Length:227496
## 1st Qu.:1215 Class :character 1st Qu.: 855 Class :character
## Median :1617 Mode :character Median :1696 Mode :character
## Mean :1578 Mean :1962
## 3rd Qu.:1953 3rd Qu.:2755
## Max. :2400 Max. :7290
## NA's :3066
## ActualElapsedTime AirTime ArrDelay DepDelay
## Min. : 34.0 Min. : 11.0 Min. :-70.000 Min. :-33.000
## 1st Qu.: 77.0 1st Qu.: 58.0 1st Qu.: -8.000 1st Qu.: -3.000
## Median :128.0 Median :107.0 Median : 0.000 Median : 0.000
## Mean :129.3 Mean :108.1 Mean : 7.094 Mean : 9.445
## 3rd Qu.:165.0 3rd Qu.:141.0 3rd Qu.: 11.000 3rd Qu.: 9.000
## Max. :575.0 Max. :549.0 Max. :978.000 Max. :981.000
## NA's :3622 NA's :3622 NA's :3622 NA's :2905
## Origin Dest Distance TaxiIn
## Length:227496 Length:227496 Min. : 79.0 Min. : 1.000
## Class :character Class :character 1st Qu.: 376.0 1st Qu.: 4.000
## Mode :character Mode :character Median : 809.0 Median : 5.000
## Mean : 787.8 Mean : 6.099
## 3rd Qu.:1042.0 3rd Qu.: 7.000
## Max. :3904.0 Max. :165.000
## NA's :3066
## TaxiOut Cancelled CancellationCode Diverted
## Min. : 1.00 Min. :0.00000 Length:227496 Min. :0.000000
## 1st Qu.: 10.00 1st Qu.:0.00000 Class :character 1st Qu.:0.000000
## Median : 14.00 Median :0.00000 Mode :character Median :0.000000
## Mean : 15.09 Mean :0.01307 Mean :0.002853
## 3rd Qu.: 18.00 3rd Qu.:0.00000 3rd Qu.:0.000000
## Max. :163.00 Max. :1.00000 Max. :1.000000
## NA's :2947
## ActualGroundTime GroundTime Speed SpeedKm
## Min. : 5.00 Min. : 5.00 Min. : 98.82 Min. : 158.1
## 1st Qu.: 15.00 1st Qu.: 15.00 1st Qu.:389.36 1st Qu.: 623.0
## Median : 20.00 Median : 20.00 Median :429.38 Median : 687.0
## Mean : 21.18 Mean : 21.19 Mean :421.02 Mean : 673.6
## 3rd Qu.: 25.00 3rd Qu.: 25.00 3rd Qu.:462.50 3rd Qu.: 740.0
## Max. :176.00 Max. :176.00 Max. :763.64 Max. :1221.8
## NA's :3622 NA's :3066 NA's :3622 NA's :3622
Dengan menggunakan dplyr
, kita bisa menghasilkan ringkasan data sesuai
kebutuhan dengan mengunakan fungsi summarise()
. Fungsi summarise()
dapat menggunakan fungsi-fungsi agregasi yang terdapat dalam base
R
maupun fungsi agregasi tambahan yang tersedia dari dplyr
. Fungsi
agregasi adalah fungsi yang menerima Vektor sebagai input dan
menghasilkan suatu angka tunggal sebagai output nya. Beberapa contoh
fungsi agregasi antara lain:
- dari
base
Rmin(x)
: nilai minimum dari Vektorx
max(x)
: nilai maksimum dari Vektorx
mean(x)
: rata-rata dari Vektorx
median(x)
: median dari Vektorx
quantile(x, p)
: kuantil kep
dari Vektorx
sd(x)
: standar deviasi dari Vektorx
var(x)
: varians dari Vektorx
IQR(x)
: Inter Quartile Range dari Vektorx
diff(range(x))
: jarak dari Vektorx
- dari package
dplyr
first(x)
: mengambil elemen pertama Vektorx
last(x)
: mengambil elemen terakhir Vektorx
nth(x, n)
: mengambil elemen ken
Vektorx
n()
: menghitung banyak observasi dari data yang disummarise()
n_distinct(x)
: menghitung jumlah nilai unik dari Vektorx
# dengan menggunakan dplyr: summarise()
# 1. mencari jumlah observasi, jumlah maskapai dan jumlah tujuan
hflights_tbl %>%
summarise(
n_obs = n(),
n_carrier = n_distinct(UniqueCarrier),
n_dest = n_distinct(Dest)
)
## # A tibble: 1 × 3
## n_obs n_carrier n_dest
## <int> <int> <int>
## 1 227496 15 116
# 2. mencari jarak penerbangan terjauh, delay keberangkatan terlama, delay kedatangan terlama dan total delay terlama
hflights_tbl %>%
filter(complete.cases(hflights_tbl)) %>%
summarise(
max_distance = max(Distance),
max_dep_delay = max(DepDelay),
max_arr_delay = max(ArrDelay),
max_delay = max(DepDelay + ArrDelay)
)
## # A tibble: 1 × 4
## max_distance max_dep_delay max_arr_delay max_delay
## <int> <int> <int> <int>
## 1 3904 981 978 1948
# dengan menggunakan dplyr: group_by() dan pipe operator
# 1. mencari persentase penerbangan yang dibatalkan dan rata-rata delay kedatangan untuk tiap maskapai
hflights_tbl %>%
group_by(UniqueCarrier) %>%
summarise(n_cancelled = mean(Cancelled == 1) * 100, #persentase
avg_delay = mean(ArrDelay, na.rm = TRUE)
)
## # A tibble: 15 × 3
## UniqueCarrier n_cancelled avg_delay
## <chr> <dbl> <dbl>
## 1 AA 1.85 0.892
## 2 AS 0 3.19
## 3 B6 2.59 9.86
## 4 CO 0.678 6.10
## 5 DL 1.59 6.08
## 6 EV 3.45 7.26
## 7 F9 0.716 7.67
## 8 FL 0.982 1.85
## 9 MQ 2.90 7.15
## 10 OO 1.39 8.69
## 11 UA 1.64 10.5
## 12 US 1.13 -0.631
## 13 WN 1.55 7.59
## 14 XE 1.55 8.19
## 15 YV 1.27 4.01
# 2. mencari maskapai dengan penerbangan terbanyak diurutkan dari tinggi ke rendah
hflights_tbl %>%
group_by(UniqueCarrier) %>%
summarise(n_fly = n()) %>%
arrange(desc(n_fly))
## # A tibble: 15 × 2
## UniqueCarrier n_fly
## <chr> <int>
## 1 XE 73053
## 2 CO 70032
## 3 WN 45343
## 4 OO 16061
## 5 MQ 4648
## 6 US 4082
## 7 AA 3244
## 8 DL 2641
## 9 EV 2204
## 10 FL 2139
## 11 UA 2072
## 12 F9 838
## 13 B6 695
## 14 AS 365
## 15 YV 79
# 3. mencari tujuan yang paling sering dikunjungi untuk tiap maskapai
hflights_tbl %>%
group_by(UniqueCarrier, Dest) %>%
summarise(n = n()) %>%
mutate(rank = rank(desc(n))) %>%
filter(rank == 1)
## `summarise()` has grouped output by 'UniqueCarrier'. You can override using the
## `.groups` argument.
## # A tibble: 15 × 4
## # Groups: UniqueCarrier [15]
## UniqueCarrier Dest n rank
## <chr> <chr> <int> <dbl>
## 1 AA DFW 2105 1
## 2 AS SEA 365 1
## 3 B6 JFK 695 1
## 4 CO EWR 3924 1
## 5 DL ATL 2396 1
## 6 EV DTW 851 1
## 7 F9 DEN 837 1
## 8 FL ATL 2029 1
## 9 MQ DFW 2424 1
## 10 OO COS 1335 1
## 11 UA SFO 643 1
## 12 US CLT 2212 1
## 13 WN DAL 8243 1
## 14 XE CRP 3175 1
## 15 YV CLT 71 1