2016-04-01 78 views
-3

我有兩個data.table dxdy加入data.table與參數

dx <- data.table(a = c(1,1,1,1,2,2), b = 3:8) 
dy <- data.table(a = c(1,1,2), c = 7:9) 

我想加入dydx每一行,以下是所需的輸出

data.table(plyr::ddply(dx, c("a", "b"), function(d) merge(d, dy, by = "a"))) 
    a b c 
1: 1 3 7 
2: 1 3 8 
3: 1 4 7 
4: 1 4 8 
5: 1 5 7 
6: 1 5 8 
7: 1 6 7 
8: 1 6 8 
9: 2 7 9 
10: 2 8 9 

但是,我沒有使用data.tablemerge[]內部的操作使輸出失敗?我已經厭倦了

merge(dx, dy, by = "a", all = TRUE) 

錯誤vecseq(f__,len__,如果(allow.cartesian || notjoin || anyDuplicated(f__,: 加入導致10行;超過9 = nrow(X) + nrow(i)。檢查重複的鍵值,每個鍵值在x中一次又一次地加入到同一組中,如果沒有問題,可以嘗試= .EACHI爲每個組運行j以避免大的分配。你一定要繼續,請重新運行與allow.cartesian = true;否則,請搜索的常見問題解答此錯誤消息,維基,堆棧溢出和數據表,幫助諮詢。

dy[dx,on="a"] 

vecseq中的錯誤(f__,len__,if(allow.cartesian ||不加入|| !anyDuplicated(f__,: 將結果加入10行;超過9 = nrow(x)+ nrow(i)檢查重複鍵值,每個鍵值都重複加入到同一個組中。沒關係,試着用= .EACHI來爲每個組運行j以避免大的分配,如果你確定要繼續運行,重新運行allow.cartesian = TRUE。否則,請在FAQ,Wiki中搜索這個錯誤信息,堆棧溢出和數據表,幫助諮詢

dx[, merge(dy, by = "a"), by = c("a", "b")] 

錯誤is.data.table(Y):參數 「y」 的缺失,沒有默認設置

dx[, merge(.SD, dy, by = "a"), by = c("a", "b")] 

錯誤merge.data.table(.SD,DY,通過= 「A」):在by上市 元素必須是在x和y

有效列名的我怎麼能做到這一點其實?

謝謝!

+0

試試'dy [dx,on =「a」]'。 – nicola

+0

@nicola我修改了我的問題。 – kitman0804

+6

我很抱歉,但錯誤消息告訴你如何繼續。 「如果您確定要繼續,請重新運行allow.cartesian = TRUE。」你不明白嗎? – Roland

回答

1

如果我理解正確的您的要求,有它給你想要的輸出,你提到的直接合並選項,您可以使用,

dx <- data.table(a = c(1,1,2,2), b = 3:6) 
dy <- data.table(a = c(1,1,2), c = 7:9) 
merge(x = dx, y = dy, by = "a", all = TRUE) 

How to join (merge) data frames (inner, outer, left, right)?

我希望它清除你的疑慮,如果不是,我是sory。

+0

謝謝!但我剛剛修改了我的問題。 – kitman0804

+3

試試這個命令希望它能解決你的問題dx [dy,allow.cartesian = TRUE] – Dinesh

4

由於多個1,錯誤即將到來。在默認合併中,即data.frames的實現,默認爲allow.cartesian=TRUE。但在data.table實現中,情況並非如此。因此,如果你運行下面的代碼,它會給你合併輸出。

merge(dx, dy, by = "a", all = TRUE, allow.cartesian=TRUE) 

上面的代碼會給你你想要的輸出。