R Select(), Filter(), Arrange(), Pipeline dengan Contoh

⚡ Ringkasan Cerdas

Select, Filter, dan Arrange di R adalah tiga fungsi dplyr yang mengurangi data frame menjadi kolom, baris, dan urutan yang Anda butuhkan. Panduan ini menggabungkan ketiganya dengan operator pipe pada dataset waktu perjalanan yang terdiri dari 205 baris.

  • 📋 Pemilihan Kolom: select(df, A, B) mempertahankan kolom yang diberi nama, select(df, A:C) mempertahankan rentang, dan select(df, -C) menghapus satu kolom.
  • 🔎 Penyaringan Baris: filter(df, condition) mempertahankan baris yang cocok, dan kondisi digabungkan dengan tanda ampersand (&) untuk AND atau garis vertikal (/) untuk OR.
  • 🔣 Penyortiran: Secara default, fungsi arrange() mengurutkan baris secara menaik, dan desc() membalikkan urutan kolom mana pun.
  • 🔗 Pipe Operauntuk: Operator %>% meneruskan setiap hasil langsung ke kata kerja berikutnya, sehingga tidak ada objek perantara yang mengacaukan lingkungan.
  • 🧹 Fungsi Pembantu: starts_with(), contains() dan where() memilih kolom berdasarkan pola atau tipe, bukan berdasarkan nama.
  • 📐 Urutan Kata Kerja Itu Penting: Saring data sejak dini untuk memperkecil ukuran data, kemudian pilih, lalu atur, sehingga setiap langkah selanjutnya menjadi lebih hemat biaya.

Pilih Filter Susun Saluran Pipa

Apa itu dplyr di R?

dplyr adalah paket manipulasi data dari tidyverse. Paket ini menggantikan notasi kurung siku pada basis R dengan sejumlah kecil kata kerja, masing-masing dinamai sesuai dengan tindakan yang dilakukannya dan masing-masing mengambil data frame sebagai argumen pertamanya. Bentuk yang konsisten itulah yang memungkinkan kata kerja tersebut dirangkai bersama.

Kata kerja Bertindak pada Apa yang dilakukannya
Pilih() Kolom Mempertahankan atau menghapus variabel
Saring() Baris Mempertahankan baris yang sesuai dengan suatu kondisi.
mengatur() Baris Mengatur ulang baris berdasarkan satu atau lebih kolom.
mengubah() Kolom Membuat atau memodifikasi variabel
meringkaskan() Seluruh meja Menggabungkan banyak baris menjadi satu statistik.
kelompokkan berdasarkan() Seluruh meja Memisahkan data sehingga kata kerja selanjutnya berjalan per kelompok.

Tutorial ini membahas tiga kata kerja pertama ditambah tanda pipa. tutorial fungsi agregat Membahas fungsi group_by() dan summarise() secara mendalam.

Dataset yang Digunakan dalam Tutorial Ini

Pustaka bernama dplyr berisi kata kerja yang berharga untuk menavigasi di dalam dataset. Melalui tutorial ini, Anda akan menggunakan dataset Waktu Perjalanan. Dataset ini mencatat perjalanan yang dilakukan pengemudi antara rumah dan tempat kerja. Terdapat empat belas variabel dalam dataset, termasuk:

  • DayOfWeek: Identifikasi hari dalam seminggu pengemudi menggunakan mobilnya
  • Jarak: Total jarak perjalanan
  • MaxSpeed: Kecepatan maksimum perjalanan
  • TotalTime: Durasi perjalanan dalam menit

Dataset ini berisi 205 pengamatan, dan perjalanan tersebut terjadi dari Monday sampai hari Jumat.

Pertama-tama, Anda perlu:

  • memuat kumpulan data
  • memeriksa struktur datanya.

Salah satu fungsi dplyr yang berguna adalah glimpse(). Fungsi ini memiliki peran yang sama dengan str() di R dasar, tetapi mencetak satu baris per variabel dengan tipe dan beberapa nilai pertama, yang jauh lebih mudah dipindai pada dataset yang lebar.

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

Variabel Komentar jelas perlu diteliti lebih lanjut: semua observasi pertama kosong.

sum(df$Comments =="")

Code Penjelasan

  • sum(df$Comments == “”): Hitung observasi yang sama dengan string kosong di kolom Komentar pada df

Keluaran:

## [1] 181

Setelah data dimuat, mulailah dengan kata kerja yang memangkas kolom.

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.

Fungsi Bantu select() di R

Memberi nama setiap kolom menjadi tidak praktis begitu sebuah dataset memiliki puluhan variabel. dplyr menyediakan fitur pembantu yang memilih kolom berdasarkan pola atau berdasarkan tipe.

Pembantu Memilih kolom yang Example
dimulai dengan() Mulailah dengan sebuah untaian pilih(df, dimulai dengan("Rata-rata"))
berakhir dengan() Akhiri dengan sebuah string pilih(df, diakhiri dengan("Waktu"))
mengandung() Mengandung string di mana saja pilih(df, berisi("Kecepatan"))
pertandingan() Cocokkan ekspresi reguler pilih(df, cocok dengan(“^Max|^Avg”))
Di mana() Lulus uji tipe pilih(df, di mana(is.numeric))
semuanya() Belum diberi nama pilih(df, TotalTime, everything())
# Keep only the timing columns
df %>% select(ends_with("Time"))

# Keep every numeric column
df %>% select(where(is.numeric))

# Move TotalTime to the front, keep the rest in place
df %>% select(TotalTime, everything())

Dua kata kerja lainnya berpasangan secara alami dengan select(). Gunakan rename(new_name = old_name) untuk mengganti label kolom tanpa perlu menghapusnya.ping yang lainnya, dan relocate() untuk memindahkan kolom tanpa mencantumkan semuanya.

Saring()

Fungsi filter() mempertahankan observasi yang memenuhi suatu kondisi. Fungsi filter() bekerja persis seperti select(), Anda memasukkan data frame terlebih dahulu, kemudian kondisi yang dipisahkan oleh 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)

Code Penjelasan

  • table(): Menghitung jumlah observasi per level. Fungsi ini mengharapkan variabel faktor atau karakter.
  • tabel(step_1_df$GoingTo): Hitung jumlah perjalanan menuju setiap tujuan

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 where GoingTo == Home
select_home <- filter(df, GoingTo == "Home")
dim(select_home)

Keluaran:

## [1] 100  14
# Select observations where GoingTo == GSK (work)
select_work <- filter(df, GoingTo == "GSK")
dim(select_work)

Keluaran:

## [1] 105  14

Beberapa kriteria

Kita dapat memfilter dataset dengan lebih dari satu kriteria. Misalnya, Anda dapat...tracpada pengamatan di mana tujuan perjalanan adalah Rumah dan perjalanan 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.

Kondisi filter() umum dan Operator di R

Fungsi filter() mempertahankan setiap baris yang kondisinya bernilai TRUE. Baris yang bernilai NA akan dihilangkan, dan perilaku inilah yang mengejutkan sebagian besar pemula.

Operator Arti Example
== Sama dengan filter(df, GoingTo == “Home”)
!= Tidak sebanding dengan filter(df, DayOfWeek != “Monday")
& DAN, keduanya harus memegang filter(df, Jarak > 50 & Kecepatan Maksimum > 130)
| ATAU, salah satu dari mereka dapat memegang filter(df, DayOfWeek == “Monday” | HariDalamSeminggu == “Jumat”)
%di dalam% Mencocokkan nilai apa pun dalam sebuah vektor. filter(df, DayOfWeek %in% c(“Monday", "Jumat"))
di antara() Berada di dalam rentang numerik filter(df, between(Jarak, 48, 52))
adalah.na() Apakah ada nilai yang hilang? filter(df, is.na(EkonomiBahanBakar))

Tiga kebiasaan ini mencegah sebagian besar bug pada fungsi filter().

  • Gunakan %in% sebagai pengganti OR berantai. filter(df, DayOfWeek %in% c(“Monday”, “Jumat”)) lebih pendek dan jauh lebih sulit salah ketik daripada dua perbandingan == yang dihubungkan oleh garis vertikal.
  • Jangan pernah menguji nilai yang hilang dengan ==. Ekspresi x == NA mengembalikan NA, bukan TRUE, sehingga baris tersebut dihapus tanpa pemberitahuan. Gunakan is.na(x) sebagai gantinya.
  • Tanda koma berarti DAN. filter(df, a, b) identik dengan filter(df, a & b), itulah sebabnya contoh sebelumnya dalam tutorial ini berfungsi dengan baik dalam kedua cara tersebut.

Pipa Operator di dplyr

Pembuatan dataset memerlukan banyak operasi, seperti:

  • pengimporan
  • penggabungan
  • memilih
  • penyaringan
  • dan sebagainya

Pustaka dplyr dilengkapi dengan operator praktis, %>%, yang disebut pipaHal ini membuat manipulasi data lebih bersih, lebih cepat, dan lebih kecil kemungkinannya terjadi 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 bukan cara yang praktis untuk menggabungkan banyak operasi. Setiap hasil perantara tetap berada di lingkungan tersebut, dan nama-nama tersebut dengan cepat kehilangan maknanya.

Gunakan operator pipa %>% sebagai gantinya. Anda memberi nama data frame sekali di awal dan setiap langkah selanjutnya akan mengikuti nama tersebut.

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 a trailing `%>%`, because nothing follows it
- Note: assigning the result to a new object is optional. Without it, the output prints 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

Kedua objek tersebut identik, sehingga perintah pipe menghasilkan hasil yang persis sama dalam satu pernyataan yang mudah dibaca.

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

dplyr Kata Kerja dalam R: Referensi Cepat

Tabel di bawah ini mencantumkan setiap kata kerja yang digunakan dalam tutorial ini, beserta sintaks dan nilai yang dikembalikan oleh setiap panggilan:

Kata kerja Tujuan Code Penjelasan
melihat sekilas periksa struktur df
glimpse(df)
Fungsinya sama dengan str(), lebih mudah dibaca.
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() Pertahankan baris yang sesuai dengan satu atau lebih kondisi.
filter(df, condition1)
Satu syarat
filter(df, condition1 & condition2)
Dua kondisi digabungkan dengan DAN
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

Pertanyaan Umum Demo Slot

Pipe magrittr %>% disertakan dalam dplyr dan mendukung sintaks placeholder dengan titik. Pipe |> bawaan hadir di R 4.1 dan tidak memerlukan paket. Keduanya meneruskan hasil kiri ke argumen pertama di sebelah kanan.

Tidak. Setiap perintah dplyr mengembalikan data frame baru dan membiarkan input tidak berubah. Anda harus menetapkan hasilnya ke sebuah objek, atau meneruskannya melalui pipe, agar perubahan tersebut tetap berlaku.

Perbandingan dengan NA akan mengembalikan NA, bukan TRUE, dan filter() hanya menyimpan baris yang bernilai TRUE. Gunakan is.na() untuk memilih nilai yang hilang secara sengaja, atau drop_na() dari tidyr untuk menghapusnya.

Rekayasa fitur untuk model AI sebagian besar melibatkan penyaringan baris, pemilihan kolom, dan pengurutan. dplyr mengekspresikan langkah-langkah tersebut sebagai alur kerja yang mudah dibaca yang dapat diaudit oleh peninjau, yang penting ketika dataset pelatihan harus dapat direproduksi.

Ya. Asisten AI dapat menerjemahkan subsetting bracket menjadi panggilan select() dan filter() serta menjelaskan pipe. Selalu jalankan kedua versi dan bandingkan dimensinya, karena R dasar dan dplyr memperlakukan nilai yang hilang secara berbeda.

Ringkaslah postingan ini dengan: