2017-10-20 75 views
0

我想使用內部連接來連接兩個data.table。可能找不到匹配,然後我想要一個空的data.table和正確的col名稱。data.table當沒有找到匹配時,內部連接會產生錯誤

dt1 <- data.table(A = c(1,2), B = c(1,2)) 
dt2 <- data.table(A = c(3,4), D = c(3,4)) 
setkey(dt1, A) 
setkey(dt2, A) 
dt1[dt2, nomatch = 0] 
Error in xj[i] : invalid subscript type 'list' 
merge(dt1, dt2, 
     all.x = F, 
     all.y = F) 

Empty data.table (0 rows) of 3 cols: A,B,D 

第二種方法給了我想要的答案。但我更喜歡第一種語法,因爲它速度更快。有人知道我如何解決這個錯誤,而不使用trycatch語句。

+1

在最近版本的data.table,你不需要使用'setkey',這樣就可以減少這種到一行代碼:'dt1 [dt2,on =「A」,nomatch = 0]'。有關詳細信息,請閱讀[data.table頁面](https://github.com/Rdatatable/data.table/wiki/Getting-started)上的自動索引部分。 – lmo

回答

1

我不能從第一個例子重現你的錯誤。我假定你的意思

dt1[dt2, nomatch = 0] 

我得到:

Empty data.table (0 rows) of 3 cols: A,B,D 

基於R的最新版本,並data.table

0

我覺得這只是一個錯字有:

library(data.table) 
dt1 <- data.table(A = c(1,2), B = c(1,2)) 
dt2 <- data.table(A = c(3,4), D = c(3,4)) 

setkey(dt1, A) 
setkey(dt2, A) 
dt1[dt2, nomatch = 0] #instead of t1[t2, nomatch = 0] 
Empty data.table (0 rows) of 3 cols: A,B,D 
相關問題