Ho un data frame con 10 colonne, che raccolgono le azioni degli "utenti", dove una delle colonne contiene un ID (non univoco, identificativo dell'utente) (colonna 10). la lunghezza del frame di dati è di circa 750000 righe. Sto cercando di estrarre singoli frame di dati (ottenendo così un elenco o un vettore di frame di dati) suddivisi per colonna contenente l'identificatore "utente", per isolare le azioni di un singolo attore.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
risultante in
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
...)
Quanto segue funziona molto bene per me su un piccolo campione (1000 righe):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
e quindi accedendo all'elemento che desidero tramite percorsi [1], ad esempio.
Quando si applica sul frame di dati di grandi dimensioni originale o anche su una rappresentazione a matrice, questa soffoca la mia macchina (4 GB di RAM, MacOSX 10.6, R 2.15) e non si completa mai (so che esiste una versione R più recente, ma credo che questo non sia il problema principale ).
Sembra che la divisione sia più performante e dopo molto tempo si completa, ma non so (conoscenza R inferiore) come comporre l'elenco risultante di vettori in un vettore di matrici.
path = split(smallsampleMat, smallsampleMat[,10])
Ho preso in considerazione anche l'utilizzo di big.matrix
ecc., Ma senza molto successo ciò velocizzerebbe il processo.
dlply(df, .(userid))
e ho scoperto che è pessimo rispettosplit
anche senza coinvolgere il tempo di esecuzione direquire(plyr)
, grazie e OP!