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

时间:2018-09-08 12:24:43

标签: r join left-join right-join

在以下两个答案上,我与一位同事有分歧,因此需要第三种意见。

假设您有2个数据帧:SalaryEmployee

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

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

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

2 个答案:

答案 0 :(得分:0)

假设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

答案 1 :(得分:0)

实际上,这与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是熟悉这些方法的好地方。