【问题标题】:How do I use grepl to filter out based off matches from a string of characters?如何使用 grepl 从字符串中过滤掉匹配项?
【发布时间】:2021-01-29 15:42:37
【问题描述】:

我有一个基因名称列表,我正在尝试使用 grepl 从更大的数据集中过滤掉这些基因名称。例如:

gene_list <- c(geneA, geneB, geneC)
data <- c(XXXgene1, XXXgene2, XXXgeneF, XXXgeneA, XXXgeneB)
select_grepl <- data %>% filter(grepl(c(gene_list), data)==T)

我已经尝试过上面的 grepl 代码,但由于模式 > 1,它们只使用第一个geneA 在字符串中搜索。如果我将 c(gene_list) 更改为像“geneA”这样的单一模式,那么代码就可以工作。还有其他解决方案吗?

【问题讨论】:

    标签: r dplyr grepl


    【解决方案1】:

    您需要将grepl 中的关键字与| 分开。您可以使用paste(..., collapse = "|") 轻松做到这一点,如下所示。请注意,您需要将您作为示例提供的data 向量转换为data.frame,以便应用filter()。以下代码有效。

    代码

    gene_list <- c("geneA", "geneB", "geneC")
    data <- c("XXXgene1", "XXXgene2", "XXXgeneF", "XXXgeneA", "XXXgeneB")
    
    gene_vec <- paste(gene_list, collapse = "|")
    select_grepl <- as.data.frame(data) %>% 
                    filter(., grepl(gene_vec, data) == TRUE)
    

    输出

    > select_grepl
          data
    1 XXXgeneA
    2 XXXgeneB
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多