1

我有一个格式如下的数据框:

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。

4

1 回答 1

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
于 2013-11-04T15:13:44.960 回答