Mam ramkę danych z 10 kolumnami, zbierającą akcje „użytkowników”, gdzie jedna z kolumn zawiera identyfikator (nie jest unikalny, identyfikujący użytkownika) (kolumna 10). długość ramki danych wynosi około 750000 wierszy. Próbuję wyodrębnić pojedyncze ramki danych (więc otrzymuję listę lub wektor ramek danych) podzielone według kolumny zawierającej identyfikator „użytkownika”, aby wyodrębnić działania pojedynczego aktora.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
w wyniku
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
...)
Poniższe działa bardzo dobrze dla mnie na małej próbce (1000 wierszy):
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
a następnie uzyskiwanie dostępu do elementu, który chcę, na przykład za pomocą ścieżek [1].
Podczas nakładania na oryginalną dużą ramkę danych lub nawet reprezentację macierzy, to dławi moją maszynę (4 GB RAM, MacOSX 10.6, R 2.15) i nigdy się nie kończy (wiem, że istnieje nowsza wersja R, ale uważam, że to nie jest główny problem ).
Wydaje się, że split jest bardziej wydajny i po długim czasie się kończy, ale nie wiem (gorsza znajomość R), jak podzielić wynikową listę wektorów na wektor macierzy.
path = split(smallsampleMat, smallsampleMat[,10])
Rozważałem również użycie big.matrix
itp., Ale bez większego sukcesu przyspieszyłoby to proces.
dlply(df, .(userid))
i stwierdziłem, że jest zła w porównaniu dosplit
nawet bez angażowania czasu wykonywaniarequire(plyr)
, dziękuję i OP!