如何使用dplyr获取重复行而非仅返回逻辑向量?
解决dplyr筛选所有重复行的问题
我来帮你搞定这个需求!你想要获取所有包含重复元素的行(比如基于Name和year字段的重复组合),而不只是标记重复的逻辑向量,这里有两种清晰的解决方案:
方法1:按重复组合分组筛选(最直接)
如果你的重复判断是基于Name和year的组合(也就是同一姓名+同一年份的行视为重复),最直接的方式是同时按这两个字段分组,然后筛选出组内行数大于1的所有行:
df %>% group_by(Name, year) %>% filter(n() > 1) %>% ungroup()
逻辑说明
group_by(Name, year):把相同姓名和年份的行归为一组filter(n() > 1):只保留那些组内行数超过1的分组(也就是存在重复的组合)ungroup():取消分组,回到普通数据框格式
方法2:按Name分组,筛选组内存在重复year的行
如果你坚持要按Name单独分组,想要保留所有在该姓名下存在重复年份的行(包括该姓名下其他年份的行,如果有的话),可以这样补全你的代码:
df %>% group_by(Name) %>% filter(any(duplicated(year) | duplicated(year, fromLast = TRUE))) %>% ungroup()
逻辑说明
duplicated(year):标记组内除第一个出现外的重复年份行duplicated(year, fromLast = TRUE):标记组内除最后一个出现外的重复年份行- 两者取
|再用any()判断:只要组内存在重复的年份,就保留该组的所有行
举个例子,如果某Name下有2020年重复2次,还有2021年1次,这个方法会把该Name的3行都保留下来;而方法1只会保留2020年的那2行。你可以根据实际需求选择对应的方法~
内容的提问来源于stack exchange,提问作者bli12blu12
相关产品推荐
相关产品推荐

