full_join()r中段/批次中的两个数据帧

时间:2018-09-22 19:54:26

标签: r dplyr

我有两个要合并的数据框。

df1具有维度20015行和7个变量。 df2的尺寸为8534664行和29个变量。

当我执行full_join(df1, df2, by = "KEY")时,我得到了Error: cannot allocate vector of size 891.2 Mb,因此我设置了memory.limit(1000000),但仍然收到相同的错误。我在Windows任务管理器中查看CPU使用率图的同时运行full_join(),它呈指数增长。我还在整个代码中使用了gc()

我的问题是,那里是否有可以加入前1,000,000行的函数。稍事休息,然后加入下一行1,000,000等,直到所有行都被加入。

是否有批量运行full_join()的功能?

1 个答案:

答案 0 :(得分:0)

这只是报告在64位Windows系统(Intel〜3.5 Ghz,RAM 120GB)中使用full_joinmergedata.table运行的时间。希望它至少可以为您的案例提供参考。

library(data.table)
df1 <- data.table(KEY=sample(1:800,20015,replace = TRUE), 
                  matrix(rnorm(20015*7),20015,7))#1.1MB
df2 <- data.table(KEY=sample(1:800,8534664,replace = TRUE), 
                  matrix(rnorm(8534664*29),8534664,29))#1.9GB
library(dplyr)
tick <- Sys.time()
df_join <- full_join(df1, df2, by = "KEY") #~58.1 GB in memory
tock <- Sys.time()- tick #~1.85min
#With data.table merge.
tick <- Sys.time()
df_join<- merge(df1, df2, by = "KEY", allow.cartesian = TRUE)#~58.1 GB in memory
tock <- Sys.time() - tick #~5.75 mins