根据另一列的特定类别删除重复项
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
如果 ID
与 Category 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
我想使用 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
如果 ID
与 Category 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