如何用dplyr在长字符串列匹配模式并筛选含全部目标组织的物种
筛选包含所有目标组织的物种(R dplyr实现)
示例数据
先假设你的数据结构如下(和你提供的示例一致):
library(tibble) df <- tibble( species = c("Human", "Human", "Human", "Human", "Mouse", "Mouse", "Mouse"), tissue = c("heart", "muscle", "kidney", "liver", "heart", "muscle", "kidney") )
正确实现代码
首先定义目标组织列表,再通过分组检查每个物种是否包含所有目标组织:
library(dplyr) # 目标组织向量 target_tissues <- c("heart", "muscle", "kidney", "liver") # 方法1:分组筛选后去重,返回tibble格式结果 result <- df %>% group_by(species) %>% filter(all(target_tissues %in% tissue)) %>% distinct(species) # 方法2:直接提取符合条件的物种字符向量 result_vec <- df %>% group_by(species) %>% summarise(has_all_tissues = all(target_tissues %in% tissue)) %>% filter(has_all_tissues) %>% pull(species)
运行后result会返回包含"Human"的 tibble,result_vec直接返回字符值"Human",完全符合你的期望。
错误原因分析
你之前的代码返回空,大概率是没按物种分组检查全包含:比如错误地逐行匹配组织(如filter(tissue == target_tissues)),或者用any()代替all(),导致无法筛选出同时拥有所有目标组织的物种。
内容的提问来源于stack exchange,提问作者Apex
相关产品推荐
相关产品推荐

