如何根据2个唯一标识符找出2个数据帧元素的差异

时间:2013-11-11 18:41:36

标签: r duplicates

我有2个非常大的数据框,类似于以下内容:

df1<-data.frame(DS.ID=c(123,214,543,325,123,214),OP.ID=c("xxab","xxac","xxad","xxae","xxaf","xxaq"),P.ID=c("AAC","JGK","DIF","ADL","AAC","JGR"))

> df1
  DS.ID OP.ID P.ID
1   123  xxab  AAC
2   214  xxac  JGK
3   543  xxad  DIF
4   325  xxae  ADL
5   123  xxaf  AAC
6   214  xxaq  JGR

df2<-data.frame(DS.ID=c(123,214,543,325,123,214),OP.ID=c("xxab","xxac","xxad","xxae","xxaf","xxaq"),P.ID=c("AAC","JGK","DIF","ADL","AAC","JGS"))

> df2
  DS.ID OP.ID P.ID
1   123  xxab  AAC
2   214  xxac  JGK
3   543  xxad  DIF
4   325  xxae  ADL
5   123  xxaf  AAC
6   214  xxaq  JGS

唯一ID基于DS.ID和OP.ID的组合,因此DS.ID可以重复,但DS.ID和OP.ID的组合不会。我想找到P.ID改变的实例。此外,DS.ID和OP.ID的组合不一定在同一行。

在上面的示例中,它将返回第6行,因为P.ID已更改。我想将初始值和最终值都写入数据框。

我觉得最初的步骤是

rbind.fill(df1,df2)

.fill因为在我试图循环的数据框中添加了列。)

编辑:假设还有其他列具有不同的值。因此,除非您将它们隔离到自己的数据框中,否则重复将无效。但是,我会为许多列和许多数据框执行此操作,因此我不想为了速度而使用该方法。

1 个答案:

答案 0 :(得分:1)

如果以下代码中的ident为0,那么可能两者之间存在差异:

ll<-merge(df1,df2,by=c("DS.ID", "OP.ID"))
library(plyr)


 ddply(ll,.(DS.ID, OP.ID),summarize,ident=match(P.ID.x, P.ID.y,nomatch=0))
  DS.ID OP.ID ident
1   123  xxab     1
2   123  xxaf     1
3   214  xxac     1
4   214  xxaq     0
5   325  xxae     1
6   543  xxad     1