如何使用 dplyr 匹配较长字符串列中的模式

问题描述 投票:0回答:1

我正在尝试在数据框中(粘贴在下面)中对所有目标组织

("heart", "muscle", "kidney", "liver")
进行模式匹配,并列出具有所有目标组织的物种名称。

我的DF:

Species,Tissue
Human,Kr_liver_2
Human,Heart
Human,Liver_556
Human,Kr_Kidney_2
Human,Kr_Muscle_2
Human,Kr_Brain_2
Mouse,Brain
Mouse,Kr_liver_3
Mouse,Kr_liver_5
Mouse,Kr_liver_27

我尝试了下面的方法,但得到了空输出,但是,基于上面数据框的所需输出应该是“人类”,因为它具有所有目标组织。

Tissue_check <- df %>%
  group_by(Species) %>%
  filter(all(grepl(paste(target_tissues, collapse = "|"), tolower(Tissue)))) %>%
  pull(Species) %>%
  unique()

我怎样才能实现这个目标?

r dataframe dplyr
1个回答
0
投票

您可以将

Tissue
列的所有元素粘贴在一起,并确定是否所有目标组织都包含在其中。

library(dplyr)

target <- c("heart", "muscle", "kidney", "liver")

df %>%
  filter(all(sapply(target, grepl, toString(Tissue), ignore.case = TRUE)),
         .by = Species)

#   Species      Tissue
# 1   Human  Kr_liver_2
# 2   Human       Heart
# 3   Human   Liver_556
# 4   Human Kr_Kidney_2
# 5   Human Kr_Muscle_2
# 6   Human  Kr_Brain_2
© www.soinside.com 2019 - 2024. All rights reserved.