Doing seryjnej między zaludnionym data.table i innym, że jest pusta wprowadza jeden NA wiersz wynikowy data.table:merge.data.table ze wszystkimi = True wprowadza wiersz NA. Czy to jest poprawne?
a = data.table(c=c(1,2),key='c')
b = data.table(c=3,key='c')
b=b[c!=3]
b
# Empty data.table (0 rows) of 1 col: c
merge(a,b,all=T)
# c
# 1: NA
# 2: 1
# 3: 2
Dlaczego? Spodziewałem się, że powróci tylko rzędy data.table a
, jak to robi z merge.data.frame:
> merge.data.frame(a,b,all=T,by='c')
# c
#1 1
#2 2
Więc chcesz połączyć 'a' z pustą tabelą danych' b'. Dlaczego wprowadzasz 'b' w tak niecodzienny sposób? Dlaczego nie używać 'b = data.table()'? – user974514
@ user974514: Chciałem tylko odtworzyć problem tak, jak pojawił się w moim kodzie. Ogólnie rzecz biorąc, 'data.table's w moim kodzie są zapełniane, ale czasami nie, aw moim przypadku tabele są kluczowane, a scalanie naturalnie używa tych kluczy. Prosta 'data.table()' nie odtwarza dokładnie problemu jaki miałem. – vsalmendra
@ user974514, który dałby NULL danych.tabeli (0 wierszy i kolumn) i nie będzie kolumny "klucz". Tak więc połączenie nie byłoby możliwe. – Arun