【发布时间】:2019-12-25 14:56:40
【问题描述】:
我有一个包含 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 等,但没有太多成功可以加快进程。
【问题讨论】:
标签: r performance matrix split dataframe