Tôi có một khung dữ liệu với 10 cột, thu thập các hành động của "người dùng", trong đó một trong các cột chứa ID (không phải duy nhất, xác định người dùng) (cột 10). độ dài của khung dữ liệu là khoảng 750000 hàng. Tôi đang cố gắng trích xuất các khung dữ liệu riêng lẻ (để lấy danh sách hoặc vectơ của các khung dữ liệu) được chia theo cột chứa mã định danh "người dùng", để tách biệt các hành động của một tác nhân.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
dẫn đến
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
...)
Những điều sau đây hoạt động rất tốt đối với tôi trên một mẫu nhỏ (1000 hàng):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
và sau đó truy cập phần tử tôi muốn bằng các đường dẫn [1] chẳng hạn.
Khi áp dụng trên khung dữ liệu lớn ban đầu hoặc thậm chí là biểu diễn ma trận, điều này làm cho máy của tôi bị nghẹt (RAM 4GB, MacOSX 10.6, R 2.15) và không bao giờ hoàn thành (tôi biết rằng có phiên bản R mới hơn, nhưng tôi tin rằng đây không phải là vấn đề chính ).
Có vẻ như việc chia tách có hiệu suất cao hơn và sau một thời gian dài mới hoàn thành, nhưng tôi không biết (kiến thức R kém hơn) làm thế nào để ghép danh sách kết quả của các vectơ thành một vectơ ma trận.
path = split(smallsampleMat, smallsampleMat[,10])
Tôi cũng đã xem xét sử dụng big.matrix
vv, nhưng không có nhiều thành công sẽ tăng tốc quá trình.
dlply(df, .(userid))
và thấy rằng nó là tệ so vớisplit
thậm chí không liên quan đến thời gian chạy củarequire(plyr)
, cảm ơn bạn và OP!