我不喜歡dplyr和data.table在我的data.frame上創建一個新變量並決定比較方法。爲什麼在dplyr中將新名稱重新分配給數據框會使速度更快?
令我驚訝的是,將dplyr :: mutate()的結果重新分配給新的data.frame似乎比不這樣做更快。
這是怎麼發生的?
library(data.table)
library(tidyverse)
dt <- fread(".... data.csv") #load 200MB datafile
dt1 <- copy(dt)
dt2 <- copy(dt)
dt3 <- copy(dt)
a <- Sys.time()
dt1[, MONTH := month(as.Date(DATE))]
b <- Sys.time(); datatabletook <- b-a
c <- Sys.time()
dt_dplyr <- dt2 %>%
mutate(MONTH = month(as.Date(DATE)))
d <- Sys.time(); dplyr_reassign_took <- d - c
e <- Sys.time()
dt3 %>%
mutate(MONTH = month(as.Date(DATE)))
f <- Sys.time(); dplyrtook <- f - e
datatabletook = 17sec
dplyrtook = 47sec
dplyr_reassign_took = 17sec
'dt1 < - dt'不會創建一個名爲'dt1'的新對象;它只是使另一個指向'dt'的指針。試試'dt1 < - copy(dt)'。 – Frank
@Frank - 用你的建議編輯了這個問題。相同/相似的結果。 – Dan
好吧,有趣/意外的結果。我想這是一個可重複的例子。 – Frank