ตอบ: ป้องกันไม่ให้ 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

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

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