文档中详细说明了该行为,但基本上,merge() 默认情况下会希望给您一个data.frame,其中的列取自两个原始 dfs。它将通过所有公共列的唯一值合并两者的行。
df1 <- data.frame(a = 1:3, b = letters[1:3])
df2 <- data.frame(a = 1:5, c = LETTERS[1:5])
df1
a b
1 1 a
2 2 b
3 3 c
df2
a c
1 1 A
2 2 B
3 3 C
4 4 D
5 5 E
merge(df1, df2)
a b c
1 1 a A
2 2 b B
3 3 c C
在您的第一个示例中发生的情况是 merge() 想要通过 A 列组合您的两个数据帧的行,但由于两个 dfs 中的两行相同,它无法确定哪一行与之合并,因此它会创建所有可能的组合。
在您的第二个示例中,您没有这个问题,因此合并是明确的。 1 行将合并在一起,2 行也将合并在一起。
当您的 dfs 中有多个列时,情况会更加明显:
案例一:
> df1 <- data.frame(a = c(1, 1), b = letters[1:2])
> df2 <- data.frame(a = c(1, 1), c = LETTERS[1:2])
> df1
a b
1 1 a
2 1 b
> df2
a c
1 1 A
2 1 B
> merge(df1, df2)
a b c
1 1 a A
2 1 a B
3 1 b A
4 1 b B
案例 2:
> df1 <- data.frame(a = c(1, 2), b = letters[1:2])
> df2 <- data.frame(a = c(1, 2), c = LETTERS[1:2])
> df1
a b
1 1 a
2 2 b
> df2
a c
1 1 A
2 2 B
> merge(df1, df2)
a b c
1 1 a A
2 2 b B