我有两个数据框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等等。
答案 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=T
和all=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