Split-Apply-Combine
ปัญหาที่พบบ่อยในด้านวิทยาศาสตร์ข้อมูลคือการแบ่ง data frame ออกเป็นกลุ่ม ประมวลผลแต่ละกลุ่ม แล้วนำกลับมารวมกันเป็น data frame เดิม แนวทางนี้พบบ่อยมากในการเขียนโปรแกรม R จนมีชื่อเรียกเฉพาะว่า split-apply-combine ใน Intermediate R for Finance จะได้เรียนรู้ปัญหาและฟังก์ชันที่ใช้แก้ไขรูปแบบนี้อย่างละเอียด แต่สำหรับตอนนี้ ลองทำตัวอย่างง่าย ๆ กันก่อน
สมมติว่าสำหรับ data frame cash ต้องการคูณ cash_flow ของบริษัท A ด้วย 2 และคูณของบริษัท B ด้วย 3:
grouping <- cash$company
split_cash <- split(cash, grouping)
# We can access each list element's cash_flow column by:
split_cash$A$cash_flow
[1] 1000 4000 550
split_cash$A$cash_flow <- split_cash$A$cash_flow * 2
split_cash$B$cash_flow <- split_cash$B$cash_flow * 3
new_cash <- unsplit(split_cash, grouping)
สังเกตวิธีเข้าถึงคอลัมน์ cash_flow: เครื่องหมาย $ ตัวแรกใช้เข้าถึงอิลิเมนต์ A ใน list split_cash และ $ ตัวที่สองใช้เข้าถึงคอลัมน์ cash_flow ใน data frame ของ A
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
R เบื้องต้นสำหรับการเงิน
คำแนะนำการฝึกหัด
- มี data frame
split_cashและgroupingที่ใช้แบ่งcashพร้อมให้ใช้งานแล้ว - พิมพ์
split_cashเพื่อดูโครงสร้างของ list - พิมพ์คอลัมน์
cash_flowของบริษัทBในsplit_cash - น่าเสียดายที่บริษัท A ปิดกิจการไปแล้ว ให้กำหนด
cash_flowของบริษัท A เป็น0 - ใช้
groupingกับฟังก์ชันunsplit()เพื่อรวมsplit_cashกลับเข้าด้วยกัน แล้วกำหนดผลลัพธ์ให้กับcash_no_A - สุดท้าย พิมพ์
cash_no_Aเพื่อดู data frame ที่แก้ไขแล้ว
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Print split_cash
# Print the cash_flow column of B in split_cash
split_cash$___$___
# Set the cash_flow column of company A in split_cash to 0
split_cash$___$___ <- ___
# Use the grouping to unsplit split_cash
cash_no_A <- unsplit(___, ___)
# Print cash_no_A