การเปรียบเทียบ interval กับ datetime
งานที่พบบ่อยเมื่อใช้ interval คือการตรวจสอบว่าเวลาหนึ่งอยู่ภายใน interval หรือไม่ หรือ interval สอง interval นั้นทับซ้อนกันหรือเปล่า
ตัวดำเนินการ %within% ใช้ทดสอบว่า datetime (หรือ interval) ทางซ้ายมืออยู่ภายใน interval ทางขวามือหรือไม่ ตัวอย่างเช่น ถ้า y2001 คือ interval ที่ครอบคลุมปี 2001
y2001 <- ymd("2001-01-01") %--% ymd("2001-12-31")
แล้ว ymd("2001-03-30") %within% y2001 จะคืนค่า TRUE และ ymd("2002-03-30") %within% y2001 จะคืนค่า FALSE
int_overlaps() ทดสอบในลักษณะคล้ายกัน แต่จะคืนค่า TRUE หาก interval ทั้งสองทับซ้อนกันในส่วนใดส่วนหนึ่ง
ลองฝึกหาว่ากษัตริย์พระองค์ใดบ้างที่ได้เห็นดาวหางฮัลเลย์ในช่วงปี ค.ศ. 1066
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การทำงานกับวันที่และเวลาใน R
คำแนะนำการฝึกหัด
เราได้เตรียมชุดข้อมูล halleys ซึ่งบันทึกการปรากฏตัวของดาวหางฮัลเลย์ไว้ใน workspace ให้แล้ว
- พิมพ์
halleysเพื่อดูข้อมูล โดยperihelion_dateคือวันที่ดาวหางเข้าใกล้ดวงอาทิตย์มากที่สุด ส่วนstart_dateและend_dateคือช่วงวันที่สามารถมองเห็นดาวหางได้จากโลก - สร้างคอลัมน์ใหม่ชื่อ
visibleที่เป็น interval จากstart_dateถึงend_date - เลือกการปรากฏตัวครั้งหนึ่งโดยดึงแถวที่ 14 จาก
halleys - กรอง
monarchsเพื่อหากษัตริย์ที่halleys_1066$perihelion_dateอยู่ภายในreign - กรอง
monarchsเพื่อหากษัตริย์ที่halleys_1066$visibleทับซ้อนกับreign
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Print halleys
halleys
# New column for interval from start to end date
halleys <- halleys %>%
mutate(visible = ___)
# The visitation of 1066
halleys_1066 <- halleys[__, ]
# Monarchs in power on perihelion date
monarchs %>%
filter(___) %>%
select(name, from, to, dominion)
# Monarchs whose reign overlaps visible time
monarchs %>%
filter(___) %>%
select(name, from, to, dominion)