合并并连接R中的两个数据帧

时间:2015-03-20 00:52:26

标签: r

我有两个数据框A和B,如下所示:

firstDF:
col1 col2 id
A      1    2
B      5    3
C      6    4

secondDF:
col1 col2 id
A      1    2
E      15   5
F      16   6

Resultant DF:

col1 col2 id
A      1    2
B      5    3
C      6    4
E      15   5
F      16   6

结果数据帧必须包含两个数据帧中的所有行。如果有些行具有相同的id,则必须将其放入结果数据帧中一次。

我尝试使用rbind函数,但它返回所有合并的行。 我尝试使用条件x.id = y.id的merge函数,但创建的结果数据框有多个列,即x.col1,y.col1,x.col2,y.col2等等。

4 个答案:

答案 0 :(得分:4)

您可以使用merge()执行此操作。

merge(df1, df2, by=c("col1", "col2", "id"), all.x=T, all.y=T)

这由所有公共变量合并,将所有记录保存在任一数据框中。或者,您可以省略by=参数,R将自动使用所有公共变量。

正如@thelatemail在评论中提到的,您可以选择使用all.x=T而不是单独指定all.y=Tall=T

答案 1 :(得分:1)

您可以试用sqldf库。我不确定是什么样的加入。 但它会是这样的:

Result =sqldf("select a.col1, a.col2, a.id from firstDF as a join secondDF as b on a.id=b.id")

X=rbind(firstDB, secondDB)

然后使用unique函数过滤掉重复项。

答案 2 :(得分:0)

使用sqldf:

library(sqldf)

sqldf("select * from firstDF union select * from secondDF")

请注意,union会自动删除重复项。

答案 3 :(得分:0)

这可能不是最高效的答案,而是一种快速简便的方法 - 假设任何重复的行实际上都是完全重复的(即,对于df1中col_1 = X的任何行,如果存在在df2中的行,其中col_1 = X,所有其他列在这两行之间也是相同的) - 将对它们进行rbind并获得唯一结果:

> df1
  col_1 col_2 id
1     A     1  2
2     B     5  3
3     C     6  4
> df2
  col_1 col_2 id
1     A     1  2
2     E    15  5
3     F    16  6
> unique(rbind(df1, df2))
  col_1 col_2 id
1     A     1  2
2     B     5  3
3     C     6  4
5     E    15  5
6     F    16  6