出于展示目的,我已将矩阵缩小。
> df1 <- data.frame(matrix(rnorm(15),ncol=3))
> df2 <- data.frame(matrix(rnorm(15),ncol=3))
> colnames(df1) <- paste0("A", 1:3)
> colnames(df2) <- paste0("B", 4:6)
我们有两个数据框df1和df2,它们的列名分别为A1、A2&A3和B1、B2&B3。
所以,正如您所知,cbind()函数仅仅把数据框依次连接在一起。
> cbind(df1, df2)
A1 A2 A3 B4 B5 B6
1 2.055780 0.362796 1.25536 -1.748416 0.41855 -0.516635
2 0.010779 0.086778 -0.68413 1.183762 -1.20362 0.041147
3 -0.732393 0.235125 -0.89306 1.435362 -0.26066 -0.025933
4 -2.493843 -2.654263 0.36107 0.083018 -0.82251 -0.991135
5 0.935540 0.398196 -0.43043 0.470559 -0.54146 1.955555
merge()函数会查找共同的列。在这种情况下,没有共同的列,因此它实际上生成了一种外部乘积,其中df1的每一行与df2的每一行进行匹配。
> merge(df1, df2)
A1 A2 A3 B4 B5 B6
1 2.055780 0.362796 1.25536 -1.748416 0.41855 -0.516635
2 0.010779 0.086778 -0.68413 -1.748416 0.41855 -0.516635
3 -0.732393 0.235125 -0.89306 -1.748416 0.41855 -0.516635
4 -2.493843 -2.654263 0.36107 -1.748416 0.41855 -0.516635
5 0.935540 0.398196 -0.43043 -1.748416 0.41855 -0.516635
6 2.055780 0.362796 1.25536 1.183762 -1.20362 0.041147
7 0.010779 0.086778 -0.68413 1.183762 -1.20362 0.041147
8 -0.732393 0.235125 -0.89306 1.183762 -1.20362 0.041147
9 -2.493843 -2.654263 0.36107 1.183762 -1.20362 0.041147
10 0.935540 0.398196 -0.43043 1.183762 -1.20362 0.041147
11 2.055780 0.362796 1.25536 1.435362 -0.26066 -0.025933
12 0.010779 0.086778 -0.68413 1.435362 -0.26066 -0.025933
13 -0.732393 0.235125 -0.89306 1.435362 -0.26066 -0.025933
14 -2.493843 -2.654263 0.36107 1.435362 -0.26066 -0.025933
15 0.935540 0.398196 -0.43043 1.435362 -0.26066 -0.025933
16 2.055780 0.362796 1.25536 0.083018 -0.82251 -0.991135
17 0.010779 0.086778 -0.68413 0.083018 -0.82251 -0.991135
18 -0.732393 0.235125 -0.89306 0.083018 -0.82251 -0.991135
19 -2.493843 -2.654263 0.36107 0.083018 -0.82251 -0.991135
20 0.935540 0.398196 -0.43043 0.083018 -0.82251 -0.991135
21 2.055780 0.362796 1.25536 0.470559 -0.54146 1.955555
22 0.010779 0.086778 -0.68413 0.470559 -0.54146 1.955555
23 -0.732393 0.235125 -0.89306 0.470559 -0.54146 1.955555
24 -2.493843 -2.654263 0.36107 0.470559 -0.54146 1.955555
25 0.935540 0.398196 -0.43043 0.470559 -0.54146 1.955555
如果我们将df1的第一列重新命名为与df2的第一列名称相同,则merge()函数会在这两个列中查找共同的值。由于这两个列没有共同的值,所以输出为空。
> colnames(df1)[1] = "B4"
> merge(df1, df2)
[1] B4 A2 A3 B5 B6
<0 rows> (or 0-length row.names)
如果我们现在将df2的第一列(倒序排列,只是为了让事情有趣!)复制到df1的第一列...
> df1$B4 = rev(df2$B4)
> df1
B4 A2 A3
1 -0.50647 -0.48128 0.540799
2 -0.70684 -0.35401 0.872514
3 0.14341 1.12184 -0.079913
4 -0.59989 0.81912 1.726494
5 0.33864 0.85277 0.386702
> df2
B4 B5 B6
1 0.33864 1.83677 0.406717
2 -0.59989 -0.43630 0.075029
3 0.14341 1.01496 0.095534
4 -0.70684 1.32414 -0.122613
5 -0.50647 0.70709 -0.700225
...并尝试再次合并...
> merge(df1, df2)
B4 A2 A3 B5 B6
1 -0.70684 -0.35401 0.872514 1.32414 -0.122613
2 -0.59989 0.81912 1.726494 -0.43630 0.075029
3 -0.50647 -0.48128 0.540799 0.70709 -0.700225
4 0.14341 1.12184 -0.079913 1.01496 0.095534
5 0.33864 0.85277 0.386702 1.83677 0.406717
最终我们得到了一些有意义的东西:df1和df2的行被粘合在一起,根据df1 $B4中与df2 $B4匹配的值。
希望这能帮到您。