2017-07-02 218 views
0

在data.table中,可以直接在當前數據表(如DT)上工作而不創建副本。例如,這可以在創建新列時完成。R數據合併,不復制

DT[,new_col:=1] 

我想知道這可以做到合併,特別是左連接。例如,左連接數據表的方式是

DT_right[DT_left,on="id"] 

然而,這並不能修改原始DT_left表,要求我重新分配。即

DT_left = DT_right[DT_left,on="id"] 

有沒有辦法讓我這樣做,而無需重新分配?即直接在DT_left上工作。

+1

你想添加'DT_right'到'DT_left'的所有列嗎?參見[this](https://stackoverflow.com/questions/30468455/dynamically-build-call-for-lookup-multiple-columns/30469832#30469832)。 –

+0

感謝大衛的迴應。但我並不真正看到這種聯繫。你能解釋一下嗎? – Jim

+0

我認爲這正是你正在尋找的,所以我不知道該怎麼解釋。無論哪種方式,請參閱[這裏](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)如何以可重現的方式發佈問題,並請顯示您的期望輸出。 –

回答

1

比方說你有DT_right作爲

 id right_value 
    1: 1   2 
    2: 2   4 
    3: 3   6 
    4: 4   8 

DT_left as

id left_value 
1: 1   3 
2: 2   6 
3: 3   9 
4: 4   12 

如果要執行的DT_leftDT_right左聯接然後i.valuei.left_value即列的列名你想從DT_left加入到DT_right

DT_right[DT_left, joined_from_left := i.left_value, on = "id"] 
DT_right[] 
    id right_value joined_from_left 
1: 1   2    3 
2: 2   4    6 
3: 3   6    9 
4: 4   8    12