首页 文章

R加速计算过程250万障碍

提问于
浏览
1

我有一个巨大的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 回答

  • 8

    我不明白你为什么把所有东西都包裹在 as.numeric(as.character(...)) 中 . 那是's a performance cost you shouldn't需要 .

    另外你为什么要复制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)
    

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

相关问题