2017-03-09 116 views
0

我做一個簡單的加盟2個datables如下:山坳加入

set.seed(1) 
DT1 <- data.table(
Idx = rep(1:100), 
x1 = round(rnorm(100,0.75,0.3),2), 
x2 = round(rnorm(100,0.75,0.3),2), 
x3 = round(rnorm(100,0.75,0.3),2)) 

DT2 <- data.table(
Idx2 = rep(1:100), 
x1 = round(rep(pi,100),2), 
targetcol = rep(999,100)) 

DT2[DT1,on = c(Idx2 = "Idx")] 

這工作,但在結果,我不想一列i.x1。我只想包括'targetcol',因此也就是名稱。現在的問題是,在另一個例子中,我有許多這些重複的列與'我'之前,因此我想刪除它們或更好地排除他們在合併過程中。我知道這應該可以用X[Y,.(...)],但是我沒有找到正確的方法來填充.(...)中除了一列之外的所有列,即i.x1。所以我想知道用上面的list-syntax在數據表中選擇多列的最好方法是什麼?

其次我試過的DataTable中的新合併語法:

merge(x = DT1, y = DT2[,c("Idx2","targetcol")], by.x = "Idx",by.y = "Idx2", all.x=TRUE) 

,但它會導致不同的列排序,命名(x1.xx1.y),而且,我看它比其他方式要慢。

解決這個問題的最好方法是什麼(還有更多列和重複的情況,這只是爲了說明問題)?

+0

什麼約'DT2 [DT1 [, - 「×1」]中,= C(IDX2 = 「IDX」)]' – HubertL

+0

好,謝謝,現在與j表達式中的通常列表語法無關。我仍然想知道,如果我想使用列表語法,可以通過這樣做來選擇除列之外的所有列嗎? sthg喜歡'。(Idx2,x1,x2,x3,targetcol)',但更簡潔?此外,列的排序與「merge」不同 – user3032689

回答

2

回答從評論移動與來自HubertL代碼稍微修改

DT1[DT2[, .(Idx2, targetcol)], on = c(Idx = "Idx2")]