J'ai un cadre de données avec 10 colonnes, collectant les actions des "utilisateurs", où l'une des colonnes contient un ID (non unique, identifiant l'utilisateur) (colonne 10). La longueur du cadre de données est d'environ 750000 lignes. J'essaie d'extraire des cadres de données individuels (donc d'obtenir une liste ou un vecteur de cadres de données) divisés par la colonne contenant l'identifiant "utilisateur", pour isoler les actions d'un seul acteur.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
qui se traduit par
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
...)
La méthode suivante fonctionne très bien pour moi sur un petit échantillon (1000 lignes) :
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
et ensuite accéder à l'élément que je veux par paths[1] par exemple.
Lorsqu'il est appliqué sur le grand cadre de données original ou même sur une représentation matricielle, il étouffe ma machine (4 Go de RAM, MacOSX 10.6, R 2.15) et ne se termine jamais (je sais qu'il existe une version plus récente de R, mais je pense que ce n'est pas le problème principal).
Il semble que split soit plus performant et se termine après un long moment, mais je ne sais pas (connaissance inférieure de R) comment transformer la liste de vecteurs résultante en un vecteur de matrices.
path = split(smallsampleMat, smallsampleMat[,10])
J'ai envisagé d'utiliser également big.matrix
etc., mais sans grand succès qui permettrait d'accélérer le processus.