我正在使用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?
答案 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值,则可能还会显示更多行。因此,请确保排除那些。