我有一个包含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 RAM,MacOSX 10.6,R 2.15),并且永远不会完成(我知道存在更新的R版本,但我相信这是不是主要问题)。
似乎分裂是更高性能,并在很长时间后完成,但我不知道(劣R知识)如何将得到的向量列表分割成矩阵向量。
path = split(smallsampleMat, smallsampleMat[,10])
我也考虑过使用也等big.matrix
,但不是很成功,将加快这一进程。
我想知道'dlply(DF的性能。(userid))',发现它与'split'相比是不好的,即使不涉及'require(plyr)'的运行时间,谢谢你和OP! – Francis