R语言DataFrame重复记录验证:实现Name列重复时所有对应记录均标记为重复的问题
解决DataFrame中标记所有重复记录的问题
你遇到的问题很常见——duplicated()函数默认只会标记首次出现之后的重复项,所以第一次出现的那条重复记录不会被标记,导致只有部分重复行被识别。要实现“所有重复记录都标记为重复状态”的需求,我们只需要稍作调整,同时检查当前行在之前出现过,或者在之后还会出现即可。
问题根源
你的原代码:
df <- df %>% mutate("Duplicateid" = duplicated(ID,incomparables = c("",NA)))
这里的duplicated()仅标记了ID列中后续出现的重复值,第一次出现的重复项会被判定为FALSE,这就是为什么只有一条重复记录被标记的原因。
修正方案
我们可以结合duplicated()的默认用法和fromLast=TRUE参数(从后往前检查重复),将两个结果取逻辑或(|),这样就能覆盖所有重复的行:
# 创建原始DataFrame df <- data.frame( ID =c("DEV2962","KTN2252","ANA2719","ITI2624","DEV2698","HRT2921","","KTN2624","ANA2548","ITI2535","DEV2732","HRT2837","ERV2951","KTN2542","KTN2542","ITI2210"), city=c("DEL","mum","DEL","MUM","DEL","del","MUM","DEL","del","MUM","mum","mum","mum","mum","DEL","DEL"), Name= c("dev,akash","singh,Ajay","abbas,salman","lal,ram","singh,nkunj","garg,prabal","ali,sanu","singh,kunal","tomar,lakhan","thakur,praveen","ali,sarman","khan,zuber","singh,giriraj","sharma,lokesh","pawar,pooja","sharma,nikita") ) # 标记所有ID重复的记录(包括首次出现的那条) df <- df %>% mutate(Duplicateid = duplicated(ID, incomparables = c("",NA)) | duplicated(ID, incomparables = c("",NA), fromLast = TRUE))
针对Name列的需求(如果你的目标是Name列而非ID)
如果你的实际需求是按Name列标记重复(而非ID列),只需要把上述代码中的ID替换为Name即可:
df <- df %>% mutate(DuplicateName = duplicated(Name) | duplicated(Name, fromLast = TRUE))
效果验证
运行修正后的代码后,你会发现所有重复的行(包括第一次出现的那条)对应的Duplicateid(或DuplicateName)列都会显示为TRUE,完全符合你的需求。
内容的提问来源于stack exchange,提问作者str_rst
相关产品推荐
相关产品推荐

