匹配具有相同ID的对象,除了一个

时间:2013-11-04 15:03:56

标签: r aggregate

我的数据框格式如下:

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

   DS.ID   P.ID OP.ID
1   123    AAC  xxab
2   214    JGK  xxac
3   543    DIF  xxad
4   325    ADL  xxae
5   123    AAE  xxab
6   214    JGK  xxac

我正在尝试查找DS.ID等于另一个DS.ID的实例,OP.ID等于另一个OP.ID,但P.ID不相等。我知道如何使用循环,但我宁愿做一个更快的方法,所以它返回DS.ID的/不匹配的信息。使用另一列中的逻辑向量或通过DS.ID's。

1 个答案:

答案 0 :(得分:1)

使用duplicated

df$match <- duplicated(df$DS.ID,df$OP.ID,fromLast=TRUE) | 
            duplicated(df$DS.ID,df$OP.ID)
# df
# DS.ID P.ID OP.ID match
# 1   123  AAC  xxab  TRUE
# 2   214  JGK  xxac  TRUE
# 3   543  DIF  xxad FALSE
# 4   325  ADL  xxab FALSE
# 5   123  AAE  xxab  TRUE
# 6   214  JGK  xxac  TRUE
在OP澄清后

编辑

dupli.2 <- duplicated(df$DS.ID,df$OP.ID,fromLast=TRUE) |  duplicated(df$DS.ID,df$OP.ID)
dupli.all <-  duplicated(df) | duplicated(df,fromLast=TRUE)
as.logical(dupli.2 - dupli.all)
[1]  TRUE FALSE FALSE FALSE  TRUE FALSE