R 如何解释联接?从左到右或从右到左
How does R interpret the joins ? from left to right or right to left
我与一位同事对以下两个答案存在分歧,因此需要第三者的意见。
假设您有 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"))
假设 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
.
填充缺失的左侧或右侧列
另请参阅:some very nice illustrations about join types。
这实际上与 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 是熟悉这些方法的好地方。
我与一位同事对以下两个答案存在分歧,因此需要第三者的意见。
假设您有 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"))
假设 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
.
另请参阅:some very nice illustrations about join types。
这实际上与 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 是熟悉这些方法的好地方。