ตอบ: ความแตกต่างระหว่าง ifelse() และ if_else()


ฟังก์ชัน dplyr if_else() มีข้อดีมากกว่าฟังก์ชัน ifelse() ฐาน R อยู่ 3 ประการ:

1. ฟังก์ชัน if_else() จะตรวจสอบว่าทางเลือกทั้งสองในคำสั่ง if else มีประเภทข้อมูลเหมือนกัน

2. ฟังก์ชัน if_else() จะไม่แปลงวัตถุ Date เป็นตัวเลข

3. ฟังก์ชัน if_else() มีอาร์กิวเมนต์ “หายไป” เพื่อระบุวิธีจัดการค่า NA

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงความแตกต่างเหล่านี้ในทางปฏิบัติ

ตัวอย่างที่ 1: if_else() ตรวจสอบว่าทางเลือกทั้งสองมีประเภทเดียวกัน

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ซึ่งมีข้อมูลเกี่ยวกับผู้เล่นบาสเกตบอลต่างๆ:

 #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

หากเราใช้ฟังก์ชันฐาน R ifelse() เพื่อสร้างคอลัมน์ใหม่ที่กำหนดค่า “Atlanta” ให้กับแถวที่มีค่าทีมเป็น “A” และ 0 ให้กับแถวที่มีค่าอื่น เราจะไม่ได้รับข้อผิดพลาดใดๆ แม้ว่า “แอตแลนตา” จะเป็นอักขระและ 0 จะเป็นตัวเลข:

 #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

อย่างไรก็ตาม หากเราใช้ฟังก์ชัน if_else() ของ dplyr เพื่อทำงานเดียวกันนี้ เราจะได้รับข้อผิดพลาดที่แจ้งว่าเราใช้ข้อมูลสองประเภทที่แตกต่างกันในคำสั่ง 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.

ตัวอย่างที่ 2: if_else() ไม่แปลงวัตถุวันที่เป็นค่าตัวเลข

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ที่แสดงยอดขายที่เกิดขึ้นในวันที่ต่างกันในร้านค้า:

 #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

หากเราใช้ฟังก์ชัน R base ifelse() เพื่อแก้ไขค่าของคอลัมน์วันที่ ค่าต่างๆ จะถูกแปลงเป็นตัวเลขโดยอัตโนมัติ:

 #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

อย่างไรก็ตาม หากเราใช้ฟังก์ชัน if_else() ของ dplyr ออบเจ็กต์วันที่จะยังคงเป็นวันที่:

 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

ตัวอย่างที่ 3: if_else() เสนออาร์กิวเมนต์ “หายไป” เพื่อระบุวิธีจัดการค่า NA

สมมติว่าเรามี data frame ต่อไปนี้ใน 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

หากเราใช้ฟังก์ชัน R base ifelse() เพื่อสร้างคอลัมน์ใหม่ จะไม่มีตัวเลือกเริ่มต้นในการระบุวิธีจัดการค่า 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

อย่างไรก็ตาม หากเราใช้ฟังก์ชัน if_else() ของ dplyr เราสามารถใช้อาร์กิวเมนต์ ที่หายไป เพื่อระบุวิธีจัดการกับค่า 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

โปรดทราบว่าแถวที่มีค่า NA ในคอลัมน์ ทีม จะได้รับค่า “other” ใน คอลัมน์ เมืองใหม่

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:

วิธีใช้คำสั่ง If ที่มีหลายเงื่อนไขใน R
วิธีเขียนคำสั่ง If Else แบบซ้อนใน R
วิธีเขียนฟังก์ชัน tryCatch() แรกของคุณใน R

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *