R语言:按PIT和Presence分组筛选DataFrame指定行
R中DataFrame分组筛选解决方案
需求说明
按PIT和Presence列分组,执行以下筛选规则:
- 分组内存在
check=1的行时,仅保留所有check=1的行 - 分组内仅含
check=0的行时,保留该分组全部行
解决代码
使用dplyr包实现需求,假设目标DataFrame名为df:
写法一(逻辑清晰版)
library(dplyr) df_filtered <- df %>% group_by(PIT, Presence) %>% filter(if (any(check == 1)) check == 1 else TRUE) %>% ungroup()
写法二(简洁版)
library(dplyr) df_filtered <- df %>% group_by(PIT, Presence) %>% filter(check == 1 | all(check == 0)) %>% ungroup()
代码解释
group_by(PIT, Presence):按指定两列对数据分组- 筛选逻辑:
- 写法一中,通过
any(check == 1)判断分组内是否存在check=1的行,存在则只保留这类行;否则保留全部分组行 - 写法二中,直接判断当前行
check=1,或者整个分组全为check=0,满足任一条件则保留该行
- 写法一中,通过
ungroup():取消分组状态,返回常规DataFrame结构
内容的提问来源于stack exchange,提问作者corey
相关产品推荐
相关产品推荐

