最佳答案
我有一个包含10列的数据框架,收集“用户”的操作,其中一列包含一个 ID (非唯一的,标识用户)(列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]访问我想要的元素。
当应用到原始的大型数据帧甚至矩阵表示时,这会让我的机器(4GB 内存,MacOSX 10.6,R 2.15)窒息,而且永远不会完成(我知道有更新的 R 版本存在,但我相信这不是主要问题)。
似乎拆分更有效,并且在很长时间后才能完成,但是我不知道(劣 R 知识)如何将得到的向量列表拆分成矩阵的向量。
path = split(smallsampleMat, smallsampleMat[,10])
我也考虑过使用 big.matrix
等,但没有太多的成功,这将加快过程。