我有一个数据框df,如下所示,它由某些列(id和序列)中的重复项组成:
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和序列对,对于发现的每组重复项,我都需要对其进行比较。在单独的一栏中,我想打印发现的重复项集和代码中的差异(如果有)。
示例结果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,那么也很好。
答案 0 :(得分:1)
使用dplyr
,我们首先可以为每对id
和Serial
创建一个唯一的编号,然后分别为group_by
和{{1} }计算组中的行数。
Duplicate_Set
@tmfmnk建议的较短版本
code
答案 1 :(得分:0)
我们也可以使用data.table
library(data.table)
setDT(df)[, Duplicate_Set := rleid(id, serial)][,
comment := .N, .(Duplicate_Set, code)][]
# id serial code Duplicate_Set comment
#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