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

时间:2018-03-13 13:01:21

标签: r merge dplyr left-join

我正在使用dplyrs左连接函数来匹配两个数据帧。

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

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只是分配了定义&amp; B到数据集A的类别。

为什么我会获得更多行?或者有没有其他方法来获得所需的数据框C?

3 个答案:

答案 0 :(得分:1)

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 中的相同行相匹配。例如:

NavView

答案 1 :(得分:1)

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

data_frame_b %>% count(join_col_1, join_col_2)

如果两个变量存在非唯一组合,将告知您。

答案 2 :(得分:1)

如果您要加入的A和B的名称中都具有NA值,则可能还会显示更多行。因此,请确保排除那些。