R Select(), Filter(), Arrange(), Pipeline dengan Contoh
Pustaka yang disebut dplyr berisi kata kerja berharga untuk bernavigasi di dalam kumpulan data. Melalui tutorial ini, Anda akan menggunakan kumpulan data Waktu perjalanan. Kumpulan data tersebut mengumpulkan informasi tentang perjalanan yang dipimpin oleh seorang pengemudi antara rumahnya dan tempat kerjanya. Ada empat belas variabel dalam dataset, antara lain:
- DayOfWeek: Identifikasi hari dalam seminggu pengemudi menggunakan mobilnya
- Jarak: Total jarak perjalanan
- MaxSpeed: Kecepatan maksimum perjalanan
- TotalTime: Durasi perjalanan dalam menit
Kumpulan data tersebut memiliki sekitar 200 observasi dalam kumpulan data, dan perjalanan terjadi di antaranya Monday sampai hari Jumat.
Pertama-tama, Anda perlu:
- memuat kumpulan data
- memeriksa struktur datanya.
Salah satu fitur praktis dengan dplyr adalah fungsi sekilas(). Ini merupakan peningkatan dari str(). Kita dapat menggunakan sekilas() untuk melihat struktur dataset dan memutuskan manipulasi apa yang diperlukan.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
Keluaran:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
Hal ini jelas bahwa variabel Komentar memerlukan diagnosis lebih lanjut. Pengamatan pertama pada variabel Komentar hanya berupa nilai yang hilang.
sum(df$Comments =="")
Penjelasan Kode
- sum(df$Comments ==””): Jumlahkan observasi sama dengan “” di kolom komentar dari df
Keluaran:
## [1] 181
Pilih()
Kita akan mulai dengan kata kerja select(). Kita tidak selalu memerlukan semua variabel, dan praktik yang baik adalah memilih hanya variabel yang Anda anggap relevan.
Kami memiliki 181 observasi yang hilang, hampir 90 persen dari kumpulan data. Jika Anda memutuskan untuk mengecualikannya, Anda tidak akan dapat melanjutkan analisis.
Kemungkinan lainnya adalah menghilangkan variabel Comment dengan kata kerja select().
Kita dapat memilih variabel dengan cara berbeda dengan select(). Perhatikan bahwa argumen pertama adalah kumpulan data.
- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset. - `select(df, A:C)`: Select all variables from A to C from df dataset. - `select(df, -C)`: Exclude C from the dataset from df dataset.
Anda dapat menggunakan cara ketiga untuk mengecualikan variabel Komentar.
step_1_df <- select(df, -Comments) dim(df)
Keluaran:
## [1] 205 14
dim(step_1_df)
Keluaran:
## [1] 205 13
Kumpulan data asli memiliki 14 fitur sedangkan step_1_df memiliki 13 fitur.
Saring()
Kata kerja filter() membantu menjaga pengamatan mengikuti suatu kriteria. Filter() bekerja persis seperti select(), Anda memasukkan kerangka data terlebih dahulu, lalu kondisi yang dipisahkan dengan koma:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Satu kriteria
Pertama-tama, Anda dapat menghitung jumlah observasi dalam setiap level variabel faktor.
table(step_1_df$GoingTo)
Penjelasan Kode
- table(): Hitung jumlah observasi berdasarkan level. Catatan, hanya variabel tingkat faktor yang diterima
- table(step_1_df$GoingTo): Hitung jumlah perjalanan menuju tujuan akhir.
Keluaran:
## ## GSK Home ## 105 100
Fungsi table() menunjukkan 105 perjalanan menuju GSK dan 100 ke Beranda.
Kita dapat memfilter data untuk mengembalikan satu kumpulan data dengan 105 observasi dan kumpulan data lainnya dengan 100 observasi.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Keluaran:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Keluaran:
## [1] 105 14
Berbagai kriteria
Kita dapat memfilter kumpulan data dengan lebih dari satu kriteria. Misalnya, Anda dapat mengekstrak observasi yang tujuannya adalah Rumah dan terjadi pada hari Rabu.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Keluaran:
## [1] 23 14
23 observasi cocok dengan kriteria ini.
Pipa saluran
Pembuatan dataset memerlukan banyak operasi, seperti:
- pengimporan
- penggabungan
- memilih
- penyaringan
- dan sebagainya
Pustaka dplyr dilengkapi dengan operator praktis, %>%, yang disebut pipa saluran. Fitur pipeline membuat manipulasi menjadi bersih, cepat, dan tidak menimbulkan kesalahan.
Operator ini adalah kode yang melakukan langkah-langkah tanpa menyimpan langkah-langkah perantara ke hard drive. Jika Anda kembali ke contoh di atas, Anda dapat memilih variabel yang diinginkan dan memfilternya. Kami memiliki tiga langkah:
- Langkah 1: Impor data: Impor data gps
- Langkah 2: Pilih data: Pilih GoingTo dan DayOfWeek
- Langkah 3: Filter data: Kembali ke Rumah dan Rabu saja
Kita dapat menggunakan cara yang sulit untuk melakukannya:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
Keluaran:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Itu bukanlah cara yang nyaman untuk melakukan banyak operasi, terutama dalam situasi dengan banyak langkah. Lingkungan berakhir dengan banyak objek yang disimpan.
Mari kita gunakan operator saluran pipa %>% sebagai gantinya. Kita hanya perlu mendefinisikan kerangka data yang digunakan di awal dan semua proses akan mengalir darinya.
Sintaks dasar pipa
New_df <- df %>% step 1 %>% step 2 %>% ... arguments - New_df: Name of the new data frame - df: Data frame used to compute the step - step: Instruction for each step - Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
Anda dapat membuat pipa pertama Anda dengan mengikuti langkah-langkah yang disebutkan di atas.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) % > % #Step 2 select(GoingTo, DayOfWeek) % > % #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
Keluaran:
## [1] TRUE
Kami siap membuat kumpulan data yang menakjubkan dengan operator saluran pipa.
mengatur()
Dalam majalah tutorial sebelumnya, Anda mempelajari cara mengurutkan nilai dengan fungsi sort(). Perpustakaan dplyr memiliki fungsi penyortirannya. Ini bekerja seperti pesona dengan pipa. Kata kerja arrange() dapat menyusun ulang satu atau beberapa baris, baik menaik (default) atau menurun.
- `arrange(A)`: Ascending sort of variable A - `arrange(A, B)`: Ascending sort of variable A and B - `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B
Kita bisa mengurutkan jarak berdasarkan tujuan.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Keluaran:
## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed ## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4 ## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5 ## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7 ## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4 ## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7 ## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8 ## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All ## 1 78.4 8.45 45.7 37.0 No ## 2 89.0 8.28 35.6 32.6 Yes ## 3 87.3 7.89 38.5 33.3 Yes ## 4 77.8 8.45 41.6 37.6 No ## 5 93.2 7.81 34.3 31.5 Yes ## 6 78.8 8.54 40.4 37.3 No
Ringkasan
Pada tabel di bawah, Anda merangkum semua operasi yang Anda pelajari selama tutorial.
Kata kerja | Tujuan | Kode | Penjelasan |
---|---|---|---|
melihat sekilas | periksa struktur df |
glimpse(df) |
Identik dengan str() |
Pilih() | Pilih/kecualikan variabel |
select(df, A, B ,C) |
Pilih variabel A, B dan C |
select(df, A:C) |
Pilih semua variabel dari A hingga C | ||
select(df, -C) |
Kecualikan C | ||
Saring() | Filter df berdasarkan satu atau banyak kondisi |
filter(df, condition1) |
Satu syarat |
filter(df, condition1 |
ketentuan2) | ||
mengatur() | Urutkan kumpulan data dengan satu atau banyak variabel |
arrange(A) |
Semacam variabel A menaik |
arrange(A, B) |
Semacam variabel A dan B | ||
arrange(desc(A), B) |
Urutan menurun dari variabel A dan urutan naik dari B | ||
%>% | Buat alur di antara setiap langkah |
step 1 %>% step 2 %>% step 3 |