Saya memiliki bingkai data dengan 10 kolom, mengumpulkan tindakan "pengguna", di mana salah satu kolom berisi ID (tidak unik, mengidentifikasi pengguna) (kolom 10). panjang bingkai data sekitar 750000 baris. Saya mencoba untuk mengekstrak frame data individu (sehingga mendapatkan daftar atau vektor frame data) yang dipisahkan oleh kolom yang berisi pengenal "pengguna", untuk mengisolasi tindakan aktor tunggal.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
menghasilkan
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
...)
Berikut ini bekerja sangat baik untuk saya pada sampel kecil (1000 baris):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
dan kemudian mengakses elemen yang saya inginkan dengan jalur [1] misalnya.
Saat menerapkan pada bingkai data besar asli atau bahkan representasi matriks, ini mencekik mesin saya (RAM 4GB, MacOSX 10.6, R 2.15) dan tidak pernah selesai (saya tahu bahwa ada versi R yang lebih baru, tetapi saya yakin ini bukan masalah utama ).
Tampaknya pemisahan lebih berkinerja dan setelah waktu yang lama selesai, tetapi saya tidak tahu (pengetahuan R inferior) bagaimana cara memotong daftar vektor yang dihasilkan menjadi vektor matriks.
path = split(smallsampleMat, smallsampleMat[,10])
Saya telah mempertimbangkan juga menggunakan big.matrix
dll, tetapi tanpa banyak keberhasilan yang akan mempercepat prosesnya.
dlply(df, .(userid))
dan menemukan bahwa itu buruk dibandingkansplit
bahkan tanpa melibatkan jangka wakturequire(plyr)
, terima kasih dan OP!