ฉันมีกรอบข้อมูลที่มี 10 คอลัมน์ซึ่งรวบรวมการกระทำของ "ผู้ใช้" โดยที่คอลัมน์ใดคอลัมน์หนึ่งมี ID (ไม่ใช่เฉพาะระบุผู้ใช้) (คอลัมน์ 10) ความยาวของกรอบข้อมูลประมาณ 750000 แถว ฉันกำลังพยายามแยกเฟรมข้อมูลแต่ละรายการ (ดังนั้นการรับรายการหรือเวกเตอร์ของเฟรมข้อมูล) แยกตามคอลัมน์ที่มีตัวระบุ "ผู้ใช้" เพื่อแยกการกระทำของนักแสดงคนเดียว
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
ส่งผลให้
list(
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
,
4 | aad | bb4 | ... | u_002
...)
ต่อไปนี้ใช้งานได้ดีสำหรับฉันในตัวอย่างขนาดเล็ก (1,000 แถว):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
จากนั้นจึงเข้าถึงองค์ประกอบที่ฉันต้องการตามเส้นทาง [1] เช่น
เมื่อใช้กับ data frame ขนาดใหญ่ดั้งเดิมหรือแม้แต่การแสดงเมทริกซ์สิ่งนี้จะทำให้เครื่องของฉันหายไป (RAM 4GB, MacOSX 10.6, R 2.15) และไม่เสร็จสมบูรณ์ (ฉันรู้ว่ามีรุ่น R ที่ใหม่กว่าอยู่ แต่ฉันเชื่อว่านี่ไม่ใช่ปัญหาหลัก ).
ดูเหมือนว่าการแบ่งจะมีประสิทธิภาพมากกว่าและหลังจากเสร็จสิ้นเป็นเวลานาน แต่ฉันไม่รู้ว่า (ความรู้ R ที่ด้อยกว่า) จะรวมรายการเวกเตอร์ที่เป็นผลลัพธ์เป็นเวกเตอร์ของเมทริกซ์ได้อย่างไร
path = split(smallsampleMat, smallsampleMat[,10])
ฉันได้พิจารณาการใช้งานbig.matrix
ฯลฯ ด้วย แต่ไม่ประสบความสำเร็จมากนักที่จะเร่งกระบวนการ
dlply(df, .(userid))
และพบว่ามันไม่ดีเมื่อเทียบกับsplit
แม้ว่าจะไม่เกี่ยวข้องกับเวลาทำงานของrequire(plyr)
ขอบคุณและ OP!