r - R(dplyr)中的Left Join-观察太多?

标签 r merge dplyr left-join

我正在使用dplyrs左连接功能以匹配两个数据帧。

我有一个面板数据集A,该数据集A由4708行和2列ID和Name组成:

ID Name
1  Option1
1  Option2
1  Option3
2  Option2
2  Option3
3  Option1
3  Option4

我的数据集B由每个名称列(86行)的单个定义和类别组成:
Name        Definition  Category
Option1     Def1         1
Option2     Def2         1
Option3     Def2         2
Option4     Def3         2

因此,最后我需要以下数据集C,它将B的列链接到A:
ID Name      Definition   Category
1  Option1   Def1         1
1  Option2   Def2         1
1  Option3   Def2         2
2  Option2   Def2         1
2  Option3   Def2         2
3  Option1   Def1         1
3  Option4   Def3         2

我在dplyr中使用了left_join命令来执行此操作:
Data C <- left_join(A,B, by="name")

但是,由于某种原因,我得到了5355行,而不是原始的4708行,因此添加了一些行。我的理解是left_join只是将B的定义和类别分配给数据集A。

为什么我得到更多的行?还是有其他方法来获取所需的数据帧C?

最佳答案

使用left_join(A, B)时,只要B中有多个行的键列(默认情况下为相同名称的列)与A中的同一行匹配,就会添加新行。例如:

library(dplyr)
df1 <- data.frame(col1 = LETTERS[1:4],
                  col2 = 1:4)
df2 <- data.frame(col1 = rep(LETTERS[1:2], 2),
                  col3 = 4:1)

left_join(df1, df2)  # has 6 rows rather than 4

关于r - R(dplyr)中的Left Join-观察太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49256920/

相关文章:

r - 如何使用R从Dropbox下载文件(任何形式)

python - Pandas:使用另一个数据帧中的重复行更新多个数据帧列

使用 dplyr::mutate() 在列的子集上逐行 cor()

r - 合并两个数据帧,但表示两个数据帧中都存在的列

r - 如何在R中过滤数据帧每列中的NA

r - 将 sparklyr 与 master ="local"一起使用有什么好处

r - 使用 knit_expand() 从模板中提取 R 代码

R生存分析: Show total Patients (n) for Each Group

git - 为什么我使用git rebase时,同样的冲突又出现了?

python:通过键的相同值合并字典