У мене є кадр даних з 10 стовпцями, що збирає дії "користувачів", де один із стовпців містить ідентифікатор (не унікальний, ідентифікуючий користувача) (стовпець 10). довжина кадру даних становить близько 750000 рядків. Я намагаюся витягти окремі кадри даних (щоб отримати список або вектор фреймів даних), розділений на стовпець, що містить ідентифікатор "користувача", щоб ізолювати дії одного актора.
ID | Data1 | Data2 | ... | UserID
1 | aaa | bbb | ... | u_001
2 | aab | bb2 | ... | u_001
3 | aac | bb3 | ... | u_001
4 | aad | bb4 | ... | u_002
в результаті в
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
...)
На невеликому зразку (1000 рядків) мені дуже добре працює наступне:
paths = by(smallsampleMat, smallsampleMat[,"userID"], function(x) x)
а потім отримати доступ до елемента, який я хочу, за допомогою шляхів [1], наприклад.
При застосуванні до оригінального великого кадру даних або навіть представлення матриці це задихає мою машину (4 Гб оперативної пам'яті, MacOSX 10.6, R 2.15) і ніколи не завершується (я знаю, що існує нова версія R, але я вважаю, що це не головна проблема ).
Здається, розбиття є більш продуктивним і через тривалий час завершується, але я не знаю (погіршує знання R), як скласти отриманий список векторів у вектор матриць.
path = split(smallsampleMat, smallsampleMat[,10])
Я розглядав можливість використання big.matrix
тощо, але без особливого успіху, що пришвидшило б процес.
dlply(df, .(userid))
та виявив, що це погано порівняно зsplit
тим, навіть без урахування часу роботиrequire(plyr)
, дякую та OP!