J: perbedaan antara ifelse() dan if_else()
Fungsi dplyr if_else() memiliki tiga keunggulan dibandingkan fungsi dasar R ifelse() :
1. Fungsi if_else() memeriksa apakah dua alternatif dalam pernyataan if else memiliki tipe data yang sama.
2. Fungsi if_else() tidak mengubah objek Tanggal menjadi numerik.
3. Fungsi if_else() menawarkan argumen “hilang” untuk menentukan cara menangani nilai NA.
Contoh-contoh berikut menggambarkan perbedaan-perbedaan dalam praktiknya.
Contoh 1: if_else() memeriksa apakah kedua alternatif memiliki tipe yang sama
Misalkan kita memiliki kerangka data berikut di R yang berisi informasi tentang berbagai pemain bola basket:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(22, 20, 28, 14, 13, 18, 27, 33)) #view data frame df team points 1 to 22 2 to 20 3 to 28 4 to 14 5 B 13 6 B 18 7 B 27 8 B 33
Jika kita menggunakan fungsi ifelse() basis R untuk membuat kolom baru yang memberikan nilai “Atlanta” ke baris dengan nilai tim “A” dan 0 ke baris dengan nilai berbeda, kita tidak akan menerima kesalahan apa pun. meskipun “Atlanta” adalah karakter dan 0 adalah angka:
#create new column based on values in team column df$city <- ifelse(df$team == ' A ', ' Atlanta ', 0) #view updated data frame df team points city 1 to 22 Atlanta 2 to 20 Atlanta 3 to 28 Atlanta 4 A 14 Atlanta 5 B 13 0 6 B 18 0 7 B 27 0 8 B 33 0
Namun, jika kita menggunakan fungsi if_else() dplyr untuk melakukan tugas yang sama, kita akan menerima kesalahan yang memberitahukan bahwa kita menggunakan dua tipe data berbeda dalam pernyataan if else:
library (dplyr) #attempt to create new column based on values in team column df$city <- if_else(df$team == ' A ', ' Atlanta ', 0) Error: `false` must be a character vector, not a double vector.
Contoh 2: if_else() tidak mengonversi objek tanggal menjadi nilai numerik
Misalkan kita memiliki bingkai data berikut di R yang menunjukkan penjualan yang dilakukan pada tanggal berbeda di sebuah toko:
#create data frame df <- data. frame (date=as. Date (c('2022-01-05', '2022-01-17', '2022-01-22', '2022-01-23', '2022-01-29', '2022-02-13')), sales=c(22, 35, 24, 20, 16, 19)) #view data frame df dirty date 1 2022-01-05 22 2 2022-01-17 35 3 2022-01-22 24 4 2022-01-23 20 5 2022-01-29 16 6 2022-02-13 19
Jika kita menggunakan fungsi basis R ifelse() untuk mengubah nilai kolom tanggal, nilainya akan otomatis dikonversi ke numerik:
#if date is before 2022-01-20 then add 5 days df$date <- ifelse(df$date < ' 2022-01-20 ', df$date+ 5 , df$date) dirty date 1 19002 22 2 19014 35 3 19014 24 4 19015 20 5 19021 16 6 19036 19
Namun, jika kita menggunakan fungsi if_else() dplyr, objek tanggal akan tetap berupa tanggal:
library (dplyr) #if date is before 2022-01-20 then add 5 days df$date <- ifelse(df$date < ' 2022-01-20 ', df$date+ 5 , df$date) #view updated data frame df dirty date 1 2022-01-10 22 2 2022-01-22 35 3 2022-01-22 24 4 2022-01-23 20 5 2022-01-29 16 6 2022-02-13 19
Contoh 3: if_else() menawarkan argumen “hilang” untuk menentukan cara menangani nilai NA
Misalkan kita memiliki bingkai data berikut di R:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', NA, 'B'), points=c(22, 20, 28, 14, 13, 18, 27, 33)) #view data frame df team points 1 to 22 2 to 20 3 to 28 4 to 14 5 B 13 6 B 18 7 <NA> 27 8 B 33
Jika kita menggunakan fungsi ifelse() basis R untuk membuat kolom baru, tidak ada opsi default untuk menentukan cara menangani nilai NA:
#create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', ' Boston ')
#view updated data frame
df
team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 Boston
6 B 18 Boston
7 <NA> 27 <NA>
8 B 33 Boston
Namun, jika kita menggunakan fungsi if_else() dplyr maka kita dapat menggunakan argumen yang hilang untuk menentukan cara menangani nilai NA:
library (dplyr)
#create new column based on values in team column
df$city <- ifelse(df$team == ' A ', ' Atlanta ', ' Boston ', missing=' other ')
#view updated data frame
df
team points city
1 to 22 Atlanta
2 to 20 Atlanta
3 to 28 Atlanta
4 A 14 Atlanta
5 B 13 Boston
6 B 18 Boston
7 <NA> 27 other
8 B 33 Boston
Perhatikan bahwa baris dengan nilai NA di kolom tim menerima nilai “lainnya” di kolom kota baru .
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di R:
Cara menggunakan pernyataan If dengan beberapa kondisi di R
Cara menulis pernyataan If Else bersarang di R
Cara menulis fungsi tryCatch() pertama Anda di R