Sau bài viết wikipedia SQL join Tôi muốn có một cái nhìn rõ ràng về cách chúng ta có thể tham gia với data.table. Trong quá trình chúng tôi có thể đã phát hiện ra một lỗi khi tham gia với NA. Lấy ví dụ wiki:data.table bên trong/bên ngoài tham gia với NA trong cột tham gia của loại lỗi đôi?
R) X = data.table(name=c("Raf","Jon","Ste","Rob","Smi","Joh"),depID=c(31,33,33,34,34,NA),key="depID")
R) Y = data.table(depID=c(31,33,34,35),depName=c("Sal","Eng","Cle","Mar"),key="depID")
R) X
name depID
1: Joh NA
2: Raf 31
3: Jon 33
4: Ste 33
5: Rob 34
6: Smi 34
R) Y
depID depName
1: 31 Sal
2: 33 Eng
3: 34 Cle
4: 35 Mar
LEFT OUTER JOIN
R) merge.data.frame(X,Y,all.x=TRUE)
depID name depName
1 31 Raf Sal
2 33 Jon Eng
3 33 Ste Eng
4 34 Rob Cle
5 34 Smi Cle
6 NA Joh <NA>
merge.data.table
không ra kết quả tương tự và hiển thị những gì tôi nghĩ là một lỗi trên lign 2.
R) merge(X,Y,all.x=TRUE)
depID name depName
1: NA Joh Eng
2: 31 Raf NA
3: 33 Jon Eng
4: 33 Ste Eng
5: 34 Rob Cle
6: 34 Smi Cle
R) Y[X] #same -> :(
depID depName name
1: NA Eng Joh
2: 31 NA Raf
3: 33 Eng Jon
4: 33 Eng Ste
5: 34 Cle Rob
6: 34 Cle Smi
RIGHT OUTER JOIN Hình như cùng
R) merge.data.frame(X,Y,all.y=TRUE)
depID name depName
1 31 Raf Sal
2 33 Jon Eng
3 33 Ste Eng
4 34 Rob Cle
5 34 Smi Cle
6 35 <NA> Mar
R) merge(X,Y,all.y=TRUE)
depID name depName
1: NA Joh Eng
2: 31 NA Sal
3: 33 Jon Eng
4: 33 Ste Eng
5: 34 Rob Cle
6: 34 Smi Cle
7: 35 NA Mar
INNER (NGUYÊN) THAM GIA
R) merge.data.frame(X,Y)
depID name depName
1 31 Raf Sal
2 33 Jon Eng
3 33 Ste Eng
4 34 Rob Cle
5 34 Smi Cle
R) merge(X,Y)
depID name depName
1: NA Joh Eng
2: 33 Jon Eng
3: 33 Ste Eng
4: 34 Rob Cle
5: 34 Smi Cle
Như đã báo cáo trong một, câu trả lời trước khi bị xóa (mà thực sự là một bình luận), việc hợp nhất hoạt động chính xác nếu các cột depID là số nguyên. –
@MatthewLundberg Thú vị, cảm ơn vì điều đó. Tại sao nó bị xóa, âm thanh hữu ích! Điều đó sẽ giải thích tại sao các xét nghiệm đã không bắt được nó - tôi có lẽ sẽ chỉ thử nghiệm NA với các số nguyên nghĩ rằng NA là gấp đôi sẽ không tạo ra sự khác biệt. –
Tôi không thể trả lời điều đó, nhưng không biết liệu bạn có muốn thử hợp nhất với số nguyên không có gợi ý hay không. Người trả lời tuyên bố rằng nhân vật cũng làm việc, nhưng tôi đã không xác minh. –