R语言使用dplyr管道筛选仅出现在单一分组的数据行
问题原因
distinct(Rank6, .keep_all = TRUE)的作用仅为按Rank6列去重、保留每个Rank6首次匹配到的行,不会校验每个Rank6在不同method分组中的覆盖情况,因此结果会混入同时存在于两个分组的条目,无法实现「筛选仅在manual组出现、未在automated组出现的Rank6」的需求。
正确实现代码
你的数据集本身已经按Rank6完成分组,可以直接在分组内做条件筛选:
library(dplyr) gen_gr1_byMeth %>% filter(!"automated" %in% method)
如果要规避原数据自带分组的干扰,也可以用通用写法,无论原数据是否提前分组都能得到正确结果:
gen_gr1_byMeth %>% ungroup() %>% group_by(Rank6) %>% filter(!"automated" %in% method)
结果说明
运行上述代码后会返回你需要的唯一目标条目:
# A tibble: 1 × 3 # Groups: Rank6 [1] Rank6 method avg_abundance <chr> <chr> <dbl> 1 Bacteria_unclassified manual 0.0106
- 筛选逻辑说明:按
Rank6分组后,判断每个分组下的method取值集合中是否不存在automated,符合该条件的Rank6就是仅出现在manual组的条目。 - 等价筛选条件:你也可以把判断条件替换为
all(method == "manual"),和上述逻辑完全等价,即组内所有行的method均为manual。 - 拓展用法:如果需要筛选仅出现在automated组的条目,把判断条件改为
!"manual" %in% method即可,会返回Lachnospiraceae_ge和Paraclostridium两个仅在自动方法组存在的条目。
内容的提问来源于stack exchange,提问作者user2814482
相关产品推荐
相关产品推荐

