根据另一列的特定类别删除重复项

Removing duplicates based on a specific category of another column

我想使用 Category 列删除数据中重复的 IDs。我的部分数据如下:

df <- data.frame(ID=c(1,2,3,4,1,4,2),
                 category=c("a","b","c","d","b","a","a"))
df

  ID category
1  1        a
2  2        b
3  3        c
4  4        d
5  1        b
6  4        a
7  2        a

如果 IDCategory b 重复,我需要保留它并从其他类别中删除相应的 ID。而且,如果重复的 IDs 来自 Category b 以外的其他类别,我没有优先权。所以,我最喜欢的结果是:

  ID category
1  2        b
2  3        c
3  4        d
4  1        b

我已经读过这个 post : 但找不到我的答案

我们可以对 'b' 类别行进行 arrange 排列在顶部,然后通过 'ID'

获得 distinct
library(dplyr)
df %>%
     arrange(category != 'b') %>% 
     distinct(ID, .keep_all = TRUE)

-输出

  ID category
1  2        b
2  1        b
3  3        c
4  4        d

或使用base R

df[order(df$category != 'b'), ] -> df1
df1[!duplicated(df1$ID), ]

在基础 R 中你可以这样做:

 subset(df, !category %in% category[ID %in% ID[category == 'b'] & category !='b'])
  ID category
1  2        b
2  3        c
3  4        d
4  1        b