Po tym artykule wikipedia SQL join chciałem mieć jasny pogląd na temat, w jaki sposób możemy mieć sprzężenia z data.table. Podczas tego procesu mogliśmy wykryć błąd podczas dołączania do NA. Biorąc przykład encyklopedii:data.table wewnętrzne/zewnętrzne sprzężenie z NA w kolumnie łączenia typu double bug?
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
nie wychodzą ten sam wynik i pokazać to, co myślę, że jest to błąd na 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 Wygląda samego
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
wewnętrznej (naturalny) DOŁĄCZ
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
jak zostało zgłoszone w poprzednim, usuniętego odpowiedź (co było naprawdę komentarzem), scalanie działa poprawnie, jeśli kolumny depID są liczbami całkowitymi. –
@MatthewLundberg Ciekawe, dzięki za to. Dlaczego został usunięty, brzmi użytecznie! To by wyjaśniało, dlaczego testy go nie złapały - prawdopodobnie pomyślałbym tylko o przetestowaniu NA na liczbach całkowitych, myśląc, że NA jako podwójne nie ma znaczenia. –
Nie mogę na to odpowiedzieć, ale nie wiedziałem, czy spróbujesz scalenia z liczbami całkowitymi bez podpowiedzi. Odpowiadający twierdził, że ta postać działała również, ale nie zweryfikowałem. –