R语言实现:当Treatment列含Chemo时移除整个sample分组
问题:保留无"Chemo"的样本分组
问题背景
需要仅保留Treatment列中**完全不存在"Chemo"**的sample分组,使用普通filter过滤后无法移除整个B组,达不到预期效果。
尝试的代码
df %>% group_by(sample) %>% filter(Treatment!="Chemo")
输入数据
> data.frame(sample=c("A","A","A","A","B","B","C","C"), Treatment=c("Chemo","Chemo", "Chemo","Chemo","Hormon","Chemo","Hormon","Hormon")) sample Treatment 1 A Chemo 2 A Chemo 3 A Chemo 4 A Chemo 5 B Hormon 6 B Chemo 7 C Hormon 8 C Hormon
期望输出
sample Treatment 7 C Hormon 8 C Hormon
正确代码及说明
正确代码
df %>% group_by(sample) %>% filter(!any(Treatment=="Chemo"))
说明
原代码filter(Treatment!="Chemo")仅过滤分组内单个Treatment为"Chemo"的行,但B组中存在Treatment为"Hormon"的行,因此会保留这些行,无法移除整个B组。
而!any(Treatment=="Chemo")的逻辑是:检查整个分组内是否存在任意一个"Chemo",如果存在则过滤掉整个分组,最终只保留完全没有"Chemo"的分组,正好匹配需求。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

