左加入 R (dplyr) - 观察太多?

Kos*_* S. 10 merge r left-join dplyr

我正在使用 dplyrs left join 函数来匹配两个数据帧。

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

ID Name
1  Option1
1  Option2
1  Option3
2  Option2
2  Option3
3  Option1
3  Option4
Run Code Online (Sandbox Code Playgroud)

我的数据集 B 由每个名称列(86 行)的单个定义和类别组成:

Name        Definition  Category
Option1     Def1         1
Option2     Def2         1
Option3     Def2         2
Option4     Def3         2
Run Code Online (Sandbox Code Playgroud)

所以最后我需要以下数据集 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
Run Code Online (Sandbox Code Playgroud)

我在 dplyr 中使用了 left_join 命令来做到这一点:

Data C <- left_join(A,B, by="name")
Run Code Online (Sandbox Code Playgroud)

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

为什么我得到更多的行?或者有没有其他方法可以获得所需的数据帧C?

小智 14

随着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
Run Code Online (Sandbox Code Playgroud)

  • 解决这个问题的办法是什么?你还没有提到这一点。 (2认同)

pal*_*bot 5

如果不查看原始数据,很难知道,但如果数据框 B 在连接列上不包含唯一值,则每当发生这种情况时,您都会从数据框 A 中获得重复的行。你可以尝试:

data_frame_b %>% count(join_col_1, join_col_2)
Run Code Online (Sandbox Code Playgroud)

这会让您知道两个变量是否存在非唯一组合。