我需要跨5個taables進行合併,每個taables都有一個公用密鑰,具有相同名稱的許多列以及具有唯一名稱的列數橫跨每張桌子。命名多個合併的列的默認行爲...並更改它
我發現,多個表合併後,列名的唯一性會出現問題......處理此問題並強制使用唯一列名的最佳方法是什麼?
library(data.table)
DT1<-data.table(IDs=c(1,1,2,3,4,10), V1=c(1,2,3,4,5,6))
DT2<-data.table(IDs=c(1,2,3,6,10), V2=c(6,7,8,9,10))
DT3<-data.table(IDs=c(3,4,7,8,10), V2=c(1,2,3,4,5))
DT4<-data.table(IDs=c(4,7,6,8,10), V2=c(10,11,12,13,14))
DT5<-data.table(IDs=c(4,7,6,8,10), V2=c(20,21,22,23,24))
tmp<-merge(DT1, DT2, by="IDs")
tmp
tmp<-merge(tmp, DT3, by="IDs")
tmp
tmp<-merge(tmp, DT4, by="IDs")
tmp
tmp<-merge(tmp, DT5, by="IDs")
tmp
通知的處理,如果列名,會發生什麼,在最後一種情況......我結束了重複的列名,當我試圖訪問的價值,我只得到了第一個值。
> tmp
IDs V1 V2
1: 1 1 6
2: 1 2 6
3: 2 3 7
4: 3 4 8
5: 10 6 10
> tmp<-merge(tmp, DT3, by="IDs")
> tmp
IDs V1 V2.x V2.y
1: 3 4 8 1
2: 10 6 10 5
> tmp<-merge(tmp, DT4, by="IDs")
> tmp
IDs V1 V2.x V2.y V2
1: 10 6 10 5 14
> tmp<-merge(tmp, DT5, by="IDs")
> tmp
IDs V1 V2.x V2.y V2.x V2.y
1: 10 6 10 5 14 24
> tmp$V2.x
[1] 10
,如果你不需要使用使用
make.unique()
'allow.cartesian = TRUE'(我沒有在您的示例數據中看到),那麼您可以通過引用您的第一個數據集來加入列,並將名稱分配給新列。我很忙,要回答它,但它是這樣的:'DT1 [DT2,new_col:= i.V2] [DT3,new_col2:= i.V2] [...]'。 – jangorecki我需要這個導致內部連接。如果我遵循你的代碼,我認爲我們得到了一個完整的外連接? – tcs