【问题标题】:How to find differences in elements of 2 data frames based on 2 unique identifiers如何根据 2 个唯一标识符查找 2 个数据框元素的差异
【发布时间】:2013-11-23 16:11:45
【问题描述】:

我有 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 因为在我试图循环的数据框中添加了列)。

编辑:假设其他列也具有不同的值。因此,除非您将它们隔离到它们自己的数据框中,否则重复将不起作用。但是,我将对许多列和许多数据帧执行此操作,因此为了速度,我宁愿不采用这种方法。

【问题讨论】:

    标签: r duplicates


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多