我有一个巨大的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内存并且我使用了所有内容)。
我想加快这个过程,是否有更有效的方法来达到相同的结果?
提前致谢,
罗伯特
答案 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)
(可能没有所有类型的转换)。