ทำความสะอาดข้อมูลด้วย keep
ตลอดคอร์สนี้ เราใช้ผลลัพธ์จากการทดสอบ A/B ที่ดำเนินการเป็นเวลาหนึ่งสัปดาห์
ผลลัพธ์เหล่านี้ถูกเก็บไว้ในลิสต์ชื่อ all_visits ซึ่งประกอบด้วย visit_a, visit_b และ visit_c เวกเตอร์เหล่านี้ยังไม่มีชื่อกำกับ แต่ละตัวมีตัวเลข 7 ค่า ตรงกับจำนวนวันในหนึ่งสัปดาห์
คำถามแรกที่เราต้องการตอบคือ: วันใดบ้างที่มีจำนวนการเข้าชมเฉลี่ยมากกว่า 100 ครั้งต่อชั่วโมง? เราจะใช้ฟังก์ชัน keep() ในการนี้ แต่หากเวกเตอร์ยังไม่มีชื่อ ผลลัพธ์ที่ได้จะอ่านยาก เพราะมีแต่ตัวเลขโดยไม่รู้ว่าแต่ละค่าสอดคล้องกับวันไหน
ข่าวดีคือ สามารถใช้ฟังก์ชัน set_names() เพื่อแก้ปัญหานี้ได้ ในบทนี้เราจะทำสองขั้นตอน ได้แก่ ใช้ keep() กับเวกเตอร์ที่ยังไม่มีชื่อก่อน แล้วจึงทดลองกับเวกเตอร์ที่มีชื่อกำกับแล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Functional Programming ระดับกลางด้วย purrr
คำแนะนำการฝึกหัด
- สร้าง mapper สำหรับทดสอบว่า
.xมีค่ามากกว่า 100 หรือไม่ เราจะใช้ mapper นี้สองครั้ง - นำ mapper นี้มาใช้ร่วมกับ
keep()แล้ว map ลงบนลิสต์all_visitที่ยังไม่มีชื่อ สังเกตว่าผลลัพธ์ที่ได้ยังบอกไม่ได้ว่าวันใดถูกคัดเลือกไว้ - กำหนดชื่อให้แต่ละเวกเตอร์โดยใช้
map()ร่วมกับฟังก์ชันset_names()พร้อมเวกเตอร์ชื่อที่เราได้เตรียมไว้ให้ - นำ mapper ที่สร้างไว้มา map บนลิสต์ที่มีชื่อแล้ว จะเห็นว่าผลลัพธ์อ่านง่ายขึ้นมาก!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a mapper that test if .x is more than 100
is_more_than_hundred <- ___(~ .x > 100)
# Use this mapper with keep() on the all_visits object
map(all_visits, ~ ___(.x, is_more_than_hundred))
# Use the day vector to set names to all_list
day <- c("mon", "tue", "wed", "thu", "fri", "sat", "sun")
full_visits_named <- map(all_visits, ~ ___(.x, ___))
# Use this mapper with keep()
map(full_visits_named, ~ ___(.x, ___))