![](/img/trans.png)
[英]Is it possible to join data frames using something like full_join in R without duplicating column values
[英]full_join() two data frames in segments/batches in r
我有兩個要合並的數據框。
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
行, 1,000,000
類推,直到所有行都已加入。
是否有一個函數可以批量運行full_join()
?
這只是報告使用full_join
運行並從64位Windows系統( data.table
Ghz,RAM 120GB)中的full_join
merge
花費的時間。 希望它至少可以為您的案例提供參考。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.