我想合併2個數據幀(data1
和data2
)。最初都包含大約3500萬觀察值(每個大約2GB)。合併allow.cartasian = TRUE導致觀察結果太多
我從data2
中刪除了重複項。我需要保留data 1
中的副本,因爲我希望將它們用於data1
中的每個觀察值的進一步計算。
我最初得到了有據可查的錯誤:
Check for duplicate key values in
i
, each of which join to the same group inx
over and over again. If that's ok, try includingj
and droppingby
(by-without-by) so thatj
runs for each group to avoid the large allocation. If you are sure you wish to proceed, rerun withallow.cartesian=TRUE
. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and datatable-help for advice.
作爲一個解決方案(我看了幾個主題,如here,here,並here),我包括allow.cartesian=TRUE
,但現在我碰到內存問題。另外,對於一個子集,它可以提供比我想要的更多的觀察值(data1
現在有5000萬觀測值,儘管它被指定爲all.x=TRUE
)。
我的代碼是:
#Remove duplicates before merge
data2 <- unique(data2)
#Merge
require(data.table)
data1 <- merge(data1, data2, by="ID", all.x=TRUE, allow.cartesian=TRUE)
關於如何合併這個任何意見,是非常可喜的。
您能否指定您嘗試通過合併實現的連接類型?你實際上不希望進行笛卡爾合併。這是一個交叉產品。你的內存不足,因爲結果將是35M^2數據點。見http://www.dofactory.com/Images/sql-joins.png –
我需要一個左連接。如果我嘗試沒有使用allow.cartesian,我會收到一條錯誤消息(如上面的帖子中提到的「檢查重複...」) – Res1234
示例不可重現,請閱讀如何在r tag上提出問題 – jangorecki