R 如何解释联接?从左到右或从右到左

How does R interpret the joins ? from left to right or right to left

我与一位同事对以下两个答案存在分歧,因此需要第三者的意见。

假设您有 2 个数据框:SalaryEmployee

问题:通过匹配从 SalaryEmployee 的行,您将使用哪个命令来连接 Employee 和 Salary?

Employee %>% left_join(Salary, by=c("F_NAME"="NAME")) 

Employee %>% right_join(Salary, by=c("F_NAME"="NAME")) 

假设 Employee$F_NAMESalary$NAME 包含匹配项,这两个命令都可以使用。不同之处在于如何处理没有匹配项的行。

left_join 将保留 Employee 中的所有行。对于 Employee 但不在 Salary 中的行,Salary 独有的任何列都将用 NA 填充。

right_join 将保留 Salary 中的所有行。对于 Salary 但不在 Employee 中的行,Employee 独有的任何列都将用 NA 填充。

inner_join 将只保留在 SalaryEmployee 中匹配的行。所有其他的都被丢弃。

full_join 将保留两个数据框中的所有行。任何不匹配的行都将用 NA.

填充缺失的左侧或右侧列

另请参阅:some very nice illustrations about join types

这实际上与 dplyr 相关,而不是原生 R merge。当您使用

Employee %>% left_join(Salary, by=c("F_NAME"="NAME")) 

您正在将 Employee 中的行与 EmployeeSalary 中的所有列连接起来。将给出缺失值 NA。同样,

Employee %>% right_join(Salary, by=c("F_NAME"="NAME"))

将生成 Salary 中的所有行以及两个数据框中的所有列。

我认为您的问题可能与 full_join 更相关,但 here 是熟悉这些方法的好地方。