如何在R data.table中返回按Year和Amount分组的全部重复行?
解决方法
在data.table里要提取所有同年份且金额相同的条目,你之前用duplicated()只能拿到重复组里的后续行,想要全量重复组的话,有两种常用方法:
方法一:分组筛选(推荐,效率更高)
利用data.table的分组特性,按Year和Amount分组后,只保留组内行数大于1的所有行:
DT[, if (.N > 1) .SD, by = c("Year", "Amount")]
.N是当前组的行数,判断.N > 1就表示这组是重复的.SD代表当前组的所有列数据,直接返回整个组的内容
方法二:结合双向duplicated
通过两次duplicated()分别标记正向和反向的重复行,取并集就能拿到所有重复组的条目:
DT[duplicated(DT, by = c("Year", "Amount")) | duplicated(DT, by = c("Year", "Amount"), fromLast = TRUE)]
- 第一次
duplicated()标记除首次出现外的重复行 fromLast = TRUE的duplicated()标记除末次出现外的重复行- 用
|取或,就能覆盖重复组里的所有行
内容的提问来源于stack exchange,提问作者Jiamei
相关产品推荐
相关产品推荐

