Tôi muốn tham gia hai dataframes, trong đó có thể có NA
s trong cột kết nối ở cả hai bên (tức là cả hai cột code
)Sự khác biệt trong điều trị NA/NULL bằng cách sử dụng dplyr :: left_join (R lang) so với SQL LEFT JOIN
a <- data.frame(code=c(1,2,NA))
b <- data.frame(code=c(1,2,NA, NA), name=LETTERS[1:4])
Sử dụng dplyr
, chúng tôi nhận được:
left_join(a, b, by="code")
code name
1 1 A
2 2 B
3 NA C
4 NA D
Sử dụng SQL, chúng tôi nhận được:
CREATE TABLE a (code INT);
INSERT INTO a VALUES (1),(2),(NULL);
CREATE TABLE b (code INT, name VARCHAR);
INSERT INTO b VALUES (1, 'A'),(2, 'B'),(NULL, 'C'), (NULL, 'D');
SELECT * FROM a LEFT JOIN b USING (code);
Dường như dplyr
tham gia không xử lý các giá trị NA
giống như giá trị SQL NULL
.
- Có cách nào để có được
dplyr
hoạt động giống như SQL không? - Lý do đằng sau loại điều trị NA này là gì?
PS. Tất nhiên, tôi có thể loại bỏ NA trước tiên để đạt được điều đó left_join(a, na.omit(b), by="code")
, nhưng đó không phải là câu hỏi của tôi.