我正在使用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/