假设我有两个数据框:
df1<- data.frame(id1=c('A','B','C','D','P'),
id2=c('P','H','Q','S','A'),weight=c(3,4,2,7,3), stringsAsFactors=FALSE)
df2<- data.frame(id1=c('A','H','Q','D','P'),
id2=c('P','B','C','S','Z'),var=c(2,1,2,2,1), stringsAsFactors=FALSE)
我想通过id1
和id2
加入这两个数据框,但有时会在两个表中切换记录。例如,每个帧的第二个和第三个记录应该相同,并且合并表中的输出应该是:
B H 4 1
C Q 2 2
我考虑先对列进行排序并进行合并,但这种方法不起作用,因为并非所有记录都出现在两个表中(即使排序后,您也可以切换id1
和id2
) 。这是一个玩具示例,但在实际应用中,id1
和id2
是长字符串。
解决此任务的方法是什么?
答案 0 :(得分:2)
这是一个解决方案,通过创建一个中间colunm,以有序的方式组合两个id。
df1$key <- with(df1,mapply(function(x,y){
paste(sort(c(x,y)),collapse="")
},id1,id2))
df2$key <- with(df2,mapply(function(x,y){
paste(sort(c(x,y)),collapse="")
},id1,id2))
merge(df1,df2,by="key")
# key id1.x id2.x weight id1.y id2.y var
# 1 AP A P 3 A P 2
# 2 AP P A 3 A P 2
# 3 BH B H 4 H B 1
# 4 CQ C Q 2 Q C 2
# 5 DS D S 7 D S 2