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

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *