在以下两个答案上,我与一位同事有分歧,因此需要第三种意见。
假设您有2个数据帧:Salary
和Employee
。
问题:通过将Salary
到Employee
的行进行匹配,您将使用哪个命令来联接Employee和Salary?
Employee %>% left_join(Salary, by=c("F_NAME"="NAME"))
或
Employee %>% right_join(Salary, by=c("F_NAME"="NAME"))
答案 0 :(得分:0)
假设Employee$F_NAME
和Salary$NAME
包含匹配项,这两个命令都将起作用。区别在于如何处理不匹配的行。
left_join
将保留Employee
中的所有行。对于Employee
中但不是Salary
中的行,Salary
唯一的任何列都将用NA
填充。
right_join
将保留Salary
中的所有行。对于Salary
中但不是Employee
中的行,Employee
唯一的任何列都将用NA
填充。
inner_join
将仅保留在Salary
和Employee
中都匹配的行。其他所有的都被丢弃。
full_join
将保留两个数据帧中的所有行。任何不匹配的行都将用NA
填充缺少的左侧或右侧列。
答案 1 :(得分:0)
实际上,这与dplyr
有关,而不是与本地R merge
有关。当您使用
Employee %>% left_join(Salary, by=c("F_NAME"="NAME"))
您要将Employee
中的行与Employee
和Salary
中的所有列连接在一起。缺少的值将被赋予NA
。同样,
Employee %>% right_join(Salary, by=c("F_NAME"="NAME"))
将产生Salary
中的所有行以及两个数据帧中的所有列。
我认为您的问题可能与full_join
更为相关,但是here是熟悉这些方法的好地方。