เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การเปรียบเทียบ 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)
แก้ไขและรันโค้ด