У меня есть фрейм данных с 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!