我有一个包含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)
然后例如通过path [1]访问我想要的元素。
当在原始的大数据帧甚至矩阵表示上应用时,这会使我的机器(4GB RAM,MacOSX 10.6,R 2.15)窒息而无法完成(我知道存在较新的R版本,但是我相信这不是主要问题) )。
似乎拆分性能更高,并且经过很长时间才完成,但是我不知道(R知识较差)如何将向量的结果列表分割成矩阵的向量。
path = split(smallsampleMat, smallsampleMat[,10])
我也考虑过使用big.matrix
etc,但没有成功,这会加速该过程。
dlply(df, .(userid))
发现split
即使不涉及的运行时间,它也很糟糕require(plyr)
,谢谢您和OP!