使用dplyr :: left_join(R lang)与SQL LEFT JOIN进行NA/NULL处理的区别

Mar*_*ann 6 sql r left-join dplyr

我想离开加入两个数据帧,其中NA两侧的连接列中可能有s(即两code列)

a <- data.frame(code=c(1,2,NA))
b <- data.frame(code=c(1,2,NA, NA), name=LETTERS[1:4])
Run Code Online (Sandbox Code Playgroud)

使用dplyr,我们得到:

left_join(a, b, by="code")

  code name
1    1    A
2    2    B
3   NA    C
4   NA    D
Run Code Online (Sandbox Code Playgroud)

使用SQL,我们得到:

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);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

似乎dplyr连接NA不像SQL NULL值那样对待.

  1. 有没有办法以dplyr与SQL相同的方式行事?
  2. 这种NA治疗背后的理由是什么?

PS.当然,我可以先删除NAs到达那里left_join(a, na.omit(b), by="code"),但这不是我的问题.

小智 1

默认情况下列代码有主键,因此不接受 NULL 值