ตอบ: ป้องกันไม่ให้ ifelse() แปลงวันที่เป็นตัวเลข
ฟังก์ชัน ifelse() ในฐาน R จะแปลงวัตถุวันที่เป็นวัตถุตัวเลขตามค่าเริ่มต้น
เพื่อป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้ คุณสามารถใช้วิธีใดวิธีหนึ่งต่อไปนี้เป็นทางเลือก:
วิธีที่ 1: ใช้ as.Character() ใน Base R
df$date <- as. Date (ifelse(df$date < ' 2022-01-20 ', as. character (df$date+5), as. character (df$date)))
วิธีที่ 2: ใช้ if_else() ใน dplyr
df$date <- if_else(df$date < ' 2022-01-20 ', df$date+5, df$date)
วิธีที่ 3: ใช้ fifelse() ใน data.table
df$date <- fifelse(df$date < ' 2022-01-20 ', df$date+5, df$date)
ตัวอย่างต่อไปนี้แสดงวิธีการใช้แต่ละวิธีในทางปฏิบัติกับกรอบข้อมูลต่อไปนี้ใน 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
ตัวอย่างที่ 1: ใช้ as.Character() ใน Base R
รหัสต่อไปนี้แสดงวิธีการใช้ฟังก์ชัน as.Character() กับฟังก์ชัน ifelse() ฐาน R เพื่อดำเนินการคำสั่ง if else ในคอลัมน์ วันที่ ของกรอบข้อมูลและสร้างวันที่ตามผลลัพธ์:
#if date is before 2022-01-20 then add 5 days df$date <- as. Date (ifelse(df$date < ' 2022-01-20 ', as. character (df$date+5), as. character (df$date))) #view updated data frame df dirty dates 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
หากค่าในคอลัมน์ วัน ที่อยู่ก่อน 20/01/2022 เราจะเพิ่มวันที่เข้าไปอีก 5 วัน
โปรดทราบว่าคอลัมน์ วัน ที่ยังคงรักษารูปแบบวันที่ไว้แทนที่จะถูกแปลงเป็นรูปแบบตัวเลข
ตัวอย่างที่ 2: ใช้ if_else() ใน dplyr
รหัสต่อไปนี้แสดงวิธีการใช้ฟังก์ชัน if_else() ของ dplyr เพื่อดำเนินการคำสั่ง if else ในคอลัมน์ วันที่ ในกรอบข้อมูลและสร้างวันที่ตามผลลัพธ์:
library (dplyr) #if date is before 2022-01-20 then add 5 days df$date <- if_else(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
หากค่าในคอลัมน์ วัน ที่อยู่ก่อน 20/01/2022 เราจะเพิ่มวันที่เข้าไปอีก 5 วัน
โปรดทราบว่าคอลัมน์ วัน ที่ยังคงรักษารูปแบบวันที่ไว้แทนที่จะถูกแปลงเป็นรูปแบบตัวเลข
ตัวอย่างที่ 3: ใช้ fifelse() ใน data.table
รหัสต่อไปนี้แสดงวิธีการใช้ฟังก์ชัน fifelse() ของ data.table เพื่อดำเนินการคำสั่ง if else ในคอลัมน์ วันที่ ในกรอบข้อมูลและสร้างวันที่ตามผลลัพธ์:
library (data.table) #if date is before 2022-01-20 then add 5 days df$date <- fifelse(df$date < ' 2022-01-20 ', df$date+5, df$date) #view updated data frame df dirty dates 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
หากค่าในคอลัมน์ วัน ที่อยู่ก่อน 20/01/2022 เราจะเพิ่มวันที่เข้าไปอีก 5 วัน
ขอย้ำอีกครั้งว่าคอลัมน์ วันที่ ยังคงรักษารูปแบบวันที่ไว้แทนที่จะแปลงเป็นรูปแบบตัวเลข
หมายเหตุ : สำหรับกรอบข้อมูลที่มีขนาดใหญ่มาก วิธี dplyr และ data.table จะเร็วกว่าวิธี base R
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:
วิธีเขียนคำสั่ง If Else แบบซ้อนใน R
วิธีเขียนคำสั่ง case ใน R
วิธีเพิ่มหลายคอลัมน์ใน data frame ใน R