使用“dplyr”根据重复数据和一些附加条件识别重复项
Identify duplicates based on duplicated data and some additional conditions, using `dplyr`
我正在查看这个答案 (Summarize all group values and a conditional subset in the same call),因为它给了我正确的想法(设置 dupe
列),但我需要更多帮助。
所以我的数据结构如下(医疗数据因此尽可能匿名):
指数
姓名
类别
日期
checkup_complete
1
name1
cat1
日期 1
Y
2
name1
cat1
日期 1
N
3
name1
cat2
日期 1
Y
4
name1
cat1
日期 1
Y
5
name1
cat1
日期 2
N
6
name2
cat1
日期 1
Y
7
name3
cat1
日期 2
Y
8
name2
cat2
日期 1
Y
9
name3
cat1
日期 2
N
10
name2
cat2
日期 1
Y
11
name1
cat1
日期 1
N
如果符合以下条件,数据将被视为重复:
对于给定的 category
,如果有多个 name
同名,在同一个 date
上 checkup_complete
== “Y”。符合此条件的将折叠为一条记录。
因此基于此,重复项是索引:1 和 4; 8 和 10。索引 2 和 11 不 重复。
实际的 table 是 000 行中的 10 行,所以有没有办法我可以使用 dplyr(因为我将它用作整体的一部分数据框工作流程)来标记这些是否重复?
基于我上面提供的 link,我感觉我会在 category
、name
上使用 group_by, date
和 变异 一个 dupe
列。问题是,如果不创建另一列 (cond_dupe
) 然后根据 checkup_complete
和 dupe
进行过滤,是否有一种一次性完成的方法?
这个有用吗:
df %>% group_by(category, name, date, checkup_complete) %>% filter(if(all(checkup_complete == 'Y')) row_number() == n() else TRUE)
# A tibble: 9 x 5
# Groups: category, name, date, checkup_complete [8]
index name category date checkup_complete
<dbl> <chr> <chr> <chr> <chr>
1 2 name1 cat1 date1 N
2 3 name1 cat2 date1 Y
3 4 name1 cat1 date1 Y
4 5 name1 cat1 date2 N
5 6 name2 cat1 date1 Y
6 7 name3 cat1 date2 Y
7 9 name3 cat1 date2 N
8 10 name2 cat2 date1 Y
9 11 name1 cat1 date1 N
我正在查看这个答案 (Summarize all group values and a conditional subset in the same call),因为它给了我正确的想法(设置 dupe
列),但我需要更多帮助。
所以我的数据结构如下(医疗数据因此尽可能匿名):
指数 | 姓名 | 类别 | 日期 | checkup_complete |
---|---|---|---|---|
1 | name1 | cat1 | 日期 1 | Y |
2 | name1 | cat1 | 日期 1 | N |
3 | name1 | cat2 | 日期 1 | Y |
4 | name1 | cat1 | 日期 1 | Y |
5 | name1 | cat1 | 日期 2 | N |
6 | name2 | cat1 | 日期 1 | Y |
7 | name3 | cat1 | 日期 2 | Y |
8 | name2 | cat2 | 日期 1 | Y |
9 | name3 | cat1 | 日期 2 | N |
10 | name2 | cat2 | 日期 1 | Y |
11 | name1 | cat1 | 日期 1 | N |
如果符合以下条件,数据将被视为重复:
对于给定的 category
,如果有多个 name
同名,在同一个 date
上 checkup_complete
== “Y”。符合此条件的将折叠为一条记录。
因此基于此,重复项是索引:1 和 4; 8 和 10。索引 2 和 11 不 重复。
实际的 table 是 000 行中的 10 行,所以有没有办法我可以使用 dplyr(因为我将它用作整体的一部分数据框工作流程)来标记这些是否重复?
基于我上面提供的 link,我感觉我会在 category
、name
上使用 group_by, date
和 变异 一个 dupe
列。问题是,如果不创建另一列 (cond_dupe
) 然后根据 checkup_complete
和 dupe
进行过滤,是否有一种一次性完成的方法?
这个有用吗:
df %>% group_by(category, name, date, checkup_complete) %>% filter(if(all(checkup_complete == 'Y')) row_number() == n() else TRUE)
# A tibble: 9 x 5
# Groups: category, name, date, checkup_complete [8]
index name category date checkup_complete
<dbl> <chr> <chr> <chr> <chr>
1 2 name1 cat1 date1 N
2 3 name1 cat2 date1 Y
3 4 name1 cat1 date1 Y
4 5 name1 cat1 date2 N
5 6 name2 cat1 date1 Y
6 7 name3 cat1 date2 Y
7 9 name3 cat1 date2 N
8 10 name2 cat2 date1 Y
9 11 name1 cat1 date1 N