按ID、Group分组后,保留Col3=2的行(无则保留全部行)
解决方案:按(ID, Group)分组后保留指定行
原始数据集
df <- data.frame( ID = c(1,1,2,2,3,3,4,4,5,5), Group = c("z1","z1","z2","z2","z1","z1","z3","z3","x2","x2"), Value = c(1.29, 0.81, 2.89, 1.53, 0.13, 0.97, 10.75, 8.13, 0.45, 1.43), Col3 = c(1,1,1,2,3,3,3,2,1,3) )
需求说明
按ID和Group分组后:
- 若组内存在
Col3=2的行,仅保留该行,排除组内其他行 - 若组内无
Col3=2的行,保留组内所有行
代码实现(使用dplyr)
library(dplyr) result_df <- df %>% group_by(ID, Group) %>% filter(ifelse(any(Col3 == 2), Col3 == 2, TRUE)) %>% ungroup() print(result_df)
代码逻辑解释
group_by(ID, Group):以ID和Group为分组依据filter(...):- 用
any(Col3 == 2)判断当前组是否存在目标行 - 如果存在,筛选出
Col3=2的行;如果不存在,保留组内全部行
- 用
ungroup():取消分组,恢复为常规数据框结构
预期输出
ID Group Value Col3 1 1 z1 1.29 1 2 1 z1 0.81 1 3 2 z2 1.53 2 4 3 z1 0.13 3 5 3 z1 0.97 3 6 4 z3 8.13 2 7 5 x2 0.45 1 8 5 x2 1.43 3
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

