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