R加速计算过程250万障碍

时间:2014-02-10 16:34:21

标签: r data.table performance

我有一个巨大的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内存并且我使用了所有内容)。

我想加快这个过程,是否有更有效的方法来达到相同的结果?

提前致谢,

罗伯特

1 个答案:

答案 0 :(得分:8)

我不明白为什么要把所有内容都包裹在as.numeric(as.character(...))中。这是你不应该需要的性能成本。

另外为什么要复制data.table?那是你最大的错误。看看

dt[,sumOB := (sum(as.numeric(as.character(OB))), by = "BIK"] 
dt[,NewVA := 
  (((as.numeric(as.character(VA))) / sumOB) * (as.numeric(as.character(OB))))]      
print(dt)

(可能没有所有类型的转换)。