Разделить большой фрейм данных на список фреймов данных на основе общего значения в столбце
У меня есть фрейм данных с 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
и т.д., но без особого успеха это ускорит процесс.