Tenho um data frame com 10 colunas, coletando ações de “usuários”, onde uma das colunas contém um ID (não único, identificando usuário) (coluna 10). o comprimento do quadro de dados é de cerca de 750000 linhas. Estou tentando extrair quadros de dados individuais (obtendo assim uma lista ou vetor de quadros de dados) divididos pela coluna que contém o identificador de "usuário", para isolar as ações de um único ator.
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 em
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
...)
O seguinte funciona muito bem para mim em uma pequena amostra (1000 linhas):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
e então acessar o elemento que eu quero por caminhos [1] por exemplo.
Ao aplicar no grande quadro de dados original ou mesmo em uma representação de matriz, isso bloqueia minha máquina (4 GB de RAM, MacOSX 10.6, R 2.15) e nunca termina (sei que existe uma versão R mais recente, mas acredito que este não seja o problema principal )
Parece que a divisão é mais eficiente e depois de muito tempo completa, mas não sei (conhecimento inferior de R) como juntar a lista de vetores resultante em um vetor de matrizes.
path = split(smallsampleMat, smallsampleMat[,10])
Também considerei usar big.matrix
etc, mas sem muito sucesso isso aceleraria o processo.
dlply(df, .(userid))
e descobri que é ruim comparado asplit
mesmo sem envolver o tempo de execução derequire(plyr)
, obrigado e OP!