我有两个数据框。第一个是这样的:
df1<-read.table(text=" V1 V2 V3 V4 V5
1 a a 1.5147654 1.5147654 1.5147654
2 a c 1.97638457 1.97638457 1.97638457
3 c d 1.55151792 -2.38160971 1.55151792
4 a b 2.25182522 2.25182522 -1.3523473
5 b d 1.85349445 1.85349445 1.85349445
",
header=TRUE)
第二个如下:
df2<-read.table(text=" V1 V2 V3
1 a b 1
2 c a 1.5
3 d b 3.5
4 d c 5.1
",
header=TRUE)
我想以这样的方式合并它们,我的最终结果就是这样:
V1 V2 V3 V4 V5 V6
a b 1 2.25182522 2.25182522 -1.3523473
c a 1.5 1.97638457 1.97638457 1.97638457
d b 3.5 1.85349445 1.85349445 1.85349445
d c 5.1 1.55151792 -2.38160971 1.55151792
我的意思是如果df2的两个第一列的值在df1的前两列中,那么我想合并它们以获得上述结果。有什么想法吗?
答案 0 :(得分:3)
生成odered key 列然后合并:
df1$key <- apply(df1[1:2], 1, function(i) toString(sort(i)))
df2$key <- apply(df2[1:2], 1, function(i) toString(sort(i)))
merge(df2, df1, by = "key")
# key V1.x V2.x V3.x V1.y V2.y V3.y V4 V5
# 1 a, b a b 1.0 a b 2.251825 2.251825 -1.352347
# 2 a, c c a 1.5 a c 1.976385 1.976385 1.976385
# 3 b, d d b 3.5 b d 1.853494 1.853494 1.853494
# 4 c, d d c 5.1 c d 1.551518 -2.381610 1.551518