R语言dplyr按分组基于其他列条件使用distinct()去重实现方法
解决方案
依赖包
library(dplyr)
通用处理代码(同时适配基础场景和复杂场景)
dat_processed <- dat %>% # 按id、dt分组,同一id下相同dt的行会被分到同一组 group_by(id, dt) %>% filter( # 组内存在ind=1时,仅保留所有ind=1的行 if (any(ind == "1")) ind == "1" # 组内全为ind=0时,仅保留1行 else row_number() == 1 ) %>% ungroup()
逻辑说明
上述代码完全匹配你总结的三类去重规则:
- 相同dt的行ind全部为1:
any(ind == "1")判定为真,保留所有ind=1的行(即全部行),符合规则1 - 相同dt的行ind全部为0:
any(ind == "1")判定为假,仅保留组内第一行,符合规则2 - 相同dt的行同时存在ind=0和ind=1:
any(ind == "1")判定为真,过滤掉所有ind=0的行,仅保留ind=1的行,符合规则3
注:如果你的ind列是数值类型,将判断条件中的"1"改为1即可。
内容的提问来源于stack exchange,提问作者statsnstuff
相关产品推荐
相关产品推荐

