Skip to content

Latest commit

 

History

History
869 lines (766 loc) · 40.3 KB

3.-Manipulasi-Data-Menggunakan-R.md

File metadata and controls

869 lines (766 loc) · 40.3 KB

3.Manipulasi Data Menggunakan R

Muhammad Luqman 2018-04-21

Manipulasi Data Menggunakan R

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"

Package dplyr

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 tertentu
  • filter() : memilih baris tertentu
  • arrange() : merubah susunan baris
  • mutate() : membuat kolom baru dari data yang ada
  • summarise() : membuat rangkuman data
  • group_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.

Pipe Operator

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”.

Manipulasi Data

Struktur Dataset

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

Memilih Kolom Tertentu

# 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 dengan regex tertentu
  • one_off(columns) : memilih kolom yang terdapat pada Vektor columns 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

Memilih Baris Tertentu

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

Merubah Susunan Baris

# 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

Membuat Kolom Baru

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

Membuat Rangkuman Data

# 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 R
    • min(x): nilai minimum dari Vektor x
    • max(x): nilai maksimum dari Vektor x
    • mean(x): rata-rata dari Vektor x
    • median(x): median dari Vektor x
    • quantile(x, p): kuantil ke p dari Vektor x
    • sd(x): standar deviasi dari Vektor x
    • var(x): varians dari Vektor x
    • IQR(x): Inter Quartile Range dari Vektor x
    • diff(range(x)): jarak dari Vektor x
  • dari package dplyr
    • first(x): mengambil elemen pertama Vektor x
    • last(x): mengambil elemen terakhir Vektor x
    • nth(x, n): mengambil elemen ke n Vektor x
    • n(): menghitung banyak observasi dari data yang di summarise()
    • n_distinct(x): menghitung jumlah nilai unik dari Vektor x
# 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

Manipulasi Data Berdasarkan Grup

# 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