Tengo un marco de datos con 10 columnas, que recopilan acciones de "usuarios", donde una de las columnas contiene un ID (no único, que identifica al usuario) (columna 10). la longitud del marco de datos es de aproximadamente 750000 filas. Estoy tratando de extraer marcos de datos individuales (obteniendo una lista o vector de marcos de datos) divididos por la columna que contiene el identificador de "usuario", para aislar las acciones de un solo actor.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
resultando en
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
...)
Lo siguiente funciona muy bien para mí en una pequeña muestra (1000 filas):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
y luego acceder al elemento que quiero por rutas [1] por ejemplo.
Cuando se aplica en el marco de datos grande original o incluso en una representación matricial, esto ahoga mi máquina (4GB RAM, MacOSX 10.6, R 2.15) y nunca se completa (sé que existe una versión R más nueva, pero creo que este no es el problema principal ).
Parece que la división es más eficaz y después de mucho tiempo se completa, pero no sé (conocimiento inferior de R) cómo dividir la lista resultante de vectores en un vector de matrices.
path = split(smallsampleMat, smallsampleMat[,10])
También he considerado usar big.matrix
etc., pero sin mucho éxito, eso aceleraría el proceso.
dlply(df, .(userid))
y descubrí que es malo en comparación consplit
incluso sin involucrar el tiempo de ejecución derequire(plyr)
, ¡gracias y OP!