特别加入R数据帧

时间:2017-07-17 20:14:09

标签: r dataframe data.table

假设我有两个数据框:

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)

我想通过id1id2加入这两个数据框,但有时会在两个表中切换记录。例如,每个帧的第二个和第三个记录应该相同,并且合并表中的输出应该是:

B H 4 1
C Q 2 2

我考虑先对列进行排序并进行合并,但这种方法不起作用,因为并非所有记录都出现在两个表中(即使排序后,您也可以切换id1id2) 。这是一个玩具示例,但在实际应用中,id1id2是长字符串。

解决此任务的方法是什么?

1 个答案:

答案 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