You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:02:15