2017-03-17 59 views
2

我有兩個data.table更新值,並根據在data.table方式

library(data.table) 

DT1 <- data.table(
        Part = c("A", "B", "C"), 
        Code = c(1, 3, 1), 
        PartTo = c(NA, "D", NA) 
       ) 

DT2 <- data.table(
        Part = c("A", "B", "C"), 
        Info = c(1, 3, 1) 
       ) 

,並希望更新的第一個表有一個值條件在其他表來自第二個表格的值基於來自第二個表格的條件。

我曾嘗試以下,但它更新不是 「d」,但NA:

DT2[DT1$Code == 3, Part := DT1$PartTo] 

與報警信息:

Warning message: 
In `[.data.table`(DT2, DT1$Code == 3, `:=`(Part, DT1$PartTo)) : 
Supplied 3 items to be assigned to 1 items of column 'Part' (2 unused) 

結果:

Part Info 
1: A 1 
2: NA 3 
3: C 1 

感謝您的幫助!

回答

2

我們可以子集的第一個數據集,其中「代碼」是3,做一個連接與「DT2」 on的「部分」,並分配(:=)從DT1的「PartTo」到「部分」

DT2[DT1[Code==3], Part := PartTo, on = .(Part)] 
DT2 
# Part Info 
#1: A 1 
#2: D 3 
#3: C 1