r - 检查数据框的一组重复行中的冲突
问题描述
我有一个数据框,df,如下所示,其中包含某些列(id 和 serial)中的重复项:
df <- data.frame(id = c('B19','B19','B19','B20','B20','B20'),
serial = c('a','a','a','b','b','b'),
code = c('IA284','IA114','IA114','IB290','IB485','IB290'))
df
# id serial code
# B19 a IA284
# B19 a IA114
# B19 a IA114
# B20 b IB290
# B20 b IB485
# B20 b IB290
我可以使用以下代码识别重复的 ID 和序列号:
df$comment[duplicated(df[,1:2])] <- "DUPLICATED"
但是我想计算哪些行重复(重复)了一对 id 和 serial 并且对于找到的每组重复项,然后我需要比较它的代码。在单独的列中,我想打印找到的一组重复项以及代码中的差异(如果有)。
示例结果df:
# id serial code Duplicate_Set comment
# B19 a IA284 1 1
# B19 a IA114 1 2
# B19 a IA114 1 2
# B20 b IB290 2 2
# B20 b IB485 2 1
# B20 b IB290 2 2
说明:在“Duplicate_Set”中,我想对重复的“id”和“serial”进行分组,并为它们分配一个数字。在“注释”列中,我希望对每个重复集的代码值进行比较,并打印每个集的重复代码数。这只是一个示例 df。如果有人可以帮助我在“评论”列中打印“唯一”和“重复”而不是 1 和 2,那么它也会很棒。
解决方案
使用dplyr
,我们可以首先为每对id
和创建一个唯一的数字Serial
,然后group_by
每个Duplicate_Set
和code
计算组中的行数。
library(dplyr)
df %>%
mutate(Duplicate_Set = group_indices(., id, serial)) %>%
group_by(Duplicate_Set, code) %>%
mutate(comment = n())
# id serial code Duplicate_Set comment
# <fct> <fct> <fct> <int> <int>
#1 B19 a IA284 1 1
#2 B19 a IA114 1 2
#3 B19 a IA114 1 2
#4 B20 b IB290 2 2
#5 B20 b IB485 2 1
#6 B20 b IB290 2 2
@tmfmnk 建议的较短版本
df %>%
group_by(Duplicate_Set = group_indices(., id, serial)) %>%
add_count(code, name = "comment")
推荐阅读
- elasticsearch - Elasticsearch、函数得分、自定义 score_mode(不是简单的求和/乘法)
- javascript - 如何在标题中自定义 wordpress 菜单项
- python - python websockets设置端口为无,如何获取使用的端口?
- selenium - 如何通过 Selenium 每 60 分钟出现一次单击弹出窗口
- excel - 在 VBA 用户表单上滚动到顶部
- c# - 正则表达式无效:括号不匹配
- c - time.h 需要连接到互联网吗
- encryption - 如何正确地将一个阶段中更改的文件传递到另一个管道阶段
- php - 数组的PHP问题,我不知道如何对我的关联数组求和
- php - 自定义字段未显示