ifelse()
ฟังก์ชันที่มีประโยชน์มากอีกตัวหนึ่งคือ ifelse() ซึ่งช่วยให้เขียน if statement ได้ในโค้ดเพียงบรรทัดเดียว และยังทำงานกับ vector ทั้งชุดได้ด้วย!
สมมติว่ามี vector ของราคาหุ้น และต้องการคืนค่า "Buy!" ทุกครั้งที่ apple > 110 และคืนค่า "Do nothing!" ในกรณีอื่น if statement ธรรมดาไม่เพียงพอสำหรับปัญหานี้ แต่ด้วย ifelse() สามารถทำได้ดังนี้:
apple
[1] 109.49 109.90 109.11 109.95 111.03 112.12
ifelse(test = apple > 110, yes = "Buy!", no = "Do nothing!")
[1] "Do nothing!" "Do nothing!" "Do nothing!" "Do nothing!" "Buy!"
[6] "Buy!"
ifelse() จะประเมิน test เพื่อให้ได้ logical vector จากนั้นแทนที่ค่า TRUE ด้วยสิ่งที่ระบุใน yes และแทนที่ค่า FALSE ด้วยสิ่งที่ระบุใน no
สามารถใช้ data frame stocks ที่เตรียมไว้ให้ได้เลย
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
R ระดับกลางสำหรับการเงิน
คำแนะนำการฝึกหัด
- ใช้
ifelse()ทดสอบว่าmicrมีค่ามากกว่า60แต่น้อยกว่า62หรือไม่ ถ้าเป็นจริงให้คืนค่า1และถ้าเป็นเท็จให้คืนค่า0จากนั้นเพิ่มผลลัพธ์นี้ลงในstocksเป็นคอลัมน์ชื่อmicr_buy - ใช้
ifelse()ทดสอบว่าappleมีค่ามากกว่า117หรือไม่ ถ้าเป็นจริงให้คืนค่าคอลัมน์dateและถ้าเป็นเท็จให้คืนค่าNA - พิมพ์
stocksออกมา จะเห็นว่าคอลัมน์dateกลายเป็น numeric! เพราะifelse()จะตัด attribute ของวันที่ออกก่อนคืนค่า ทำให้กลายเป็น numeric - กำหนด class ของคอลัมน์
apple_dateให้เป็น"Date" - พิมพ์
stocksอีกครั้ง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Microsoft test
stocks$micr_buy <- ifelse(test = ___, yes = ___, no = ___)
# Apple test
stocks$apple_date <- ifelse(test = ___, yes = stocks$date, no = NA)
# Print stocks
___
# Change the class() of apple_date.
class(___) <- ___
# Print stocks again
___