R语言按条件删除冗余行:相同ID和type下保留含有效值的记录
dplyr 解决方案
你可以通过分组条件筛选实现需求,核心逻辑是:对每个ID下的同type组,若组内存在有效值标记yes_no = y,则删除同组内标记为n的无效行;若组内全为n则全部保留。
实现代码
首先加载依赖包:
library(dplyr)
数据清洗代码:
df2 <- df %>% # 按ID、type分组,适配多ID、多type的通用场景 group_by(ID, type) %>% # 分组条件筛选:组内有y则仅保留y行,无y则保留所有行 filter(if(any(yes_no == "y")) yes_no == "y" else TRUE) %>% # 解除分组,避免影响后续数据操作 ungroup()
效果验证
用你提供的示例数据运行上述代码,输出结果和你给出的期望输出完全一致:
> print(df2) # A tibble: 6 × 4 ID type yes_no value <chr> <chr> <chr> <chr> 1 1 1 n NA 2 1 2 n NA 3 1 3 y 2 4 1 4 y 5 5 1 4 y 6 6 1 5 n NA
内容的提问来源于stack exchange,提问作者MLE
相关产品推荐
相关产品推荐

