【发布时间】:2014-02-10 16:34:20
【问题描述】:
我有一个巨大的 data.frame(200 万块),我在其中根据一个相同的列值计算多个列值的总和,如下所示(首先转换为 data.table):
check <- dt[,sumOB := (sum(as.numeric(as.character(OB))), by = "BIK"]
这为我提供了一个新列,其中包含具有相同 BIK 的多个值(如果适用)的总和值。在我添加以下计算之后。
calc <- check[,NewVA := (((as.numeric(as.character(VA)))
/ sumOB) * (as.numeric(as.character(OB)))), by = ""]
这工作得很好,给了我一个包含所需值的新列。我的数据框包含上述 200 万个观察值,这个过程非常缓慢且内存密集(我有 8GB 的内存,我使用了所有内存)。
我想加快这个过程,有没有更有效的方法来达到同样的结果?
提前致谢,
罗伯特
【问题讨论】:
-
给一个可重现的例子和一个人们可以扔代码的测试怎么样?
-
我建议使用示例数据(大约 10k 个对象)对您的代码进行分析。我认为类型转换是瓶颈。
-
@ArtemKlevtsov 不,在内存中复制一个巨大的数据结构是瓶颈。
-
为了制作一个可重现的示例,一个具有 3 列和 250 万行随机值(范围为 150000 : 850000)的简单矩阵就足够了。明天我将尝试使用 FREAD 摆脱 as.XXX 的
标签: r data.table performance