我有一个巨大的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 回答
我不明白你为什么把所有东西都包裹在
as.numeric(as.character(...))
中 . 那是's a performance cost you shouldn't需要 .另外你为什么要复制data.table?那是你最大的错误 . 看着
(可能没有所有类型的转换) .