查找并返回多个独立字符串

时间:2016-02-04 01:08:20

标签: r string-matching grepl

我在同一列中有一个包含多个不同字符串的表。我希望能够搜索该列并找到不同的字符串,然后为每个不同的字符串返回不同的结果。例如,如果我有以下数据列:

Seq_ID   Column2
    1. RNA-ATI_1    
    2. RNA-ATI_2
    3.  DNA-FU_1
    4.  FU-DNA_2
    5. DNA-TP1_1
    6. RNA-TP1_2
    7.  RNA-BL_1
    8.  BL-RNA_2

我想搜索字符串“ATI”并返回“ATI”并搜索“FU”并返回“FU”和“TP1”并返回“TP1”以便我可以构建一个包含字符串的新表单独的column2。 我可以使用grepl为单个值执行此操作,但我无法弄清楚如何为多个输出执行此操作。一些警告是数据并不总是在相同的顺序或分开 相同的符号。

y <- ifelse(grepl("*ATI", tab$Sequence_ID), "Analytical treatment interruption", " ")

这似乎仅适用于一个,但我无法弄清楚如何将其扩展为多个工作。

最后我想:

 Seq_ID      Column2
     1.    RNA-ATI_1    ATI
     2.    RNA-ATI_2    ATI
     3.     DNA-FU_1     FU
     4.     FU-DNA_2     FU
     5.    DNA-TP1_1    TP1
     6.    RNA-TP1_2    TP1
     7.     RNA-BL_1     BL 
     8.     BL-RNA_2     BL

2 个答案:

答案 0 :(得分:2)

您可以为regexpr调用指定多个模式,假设它们都是不同的字符串。 E.g:

regmatches(dat$Column2, regexpr("ATI|FU|TP1|BL", dat$Column2))
#[1] "ATI" "ATI" "FU"  "FU"  "TP1" "TP1" "BL"  "BL"

这也可以使用stringistringr函数在str_extract stri_extract等软件包中进行类比 - 请参阅@mnel及其上述答案。

答案 1 :(得分:1)

您可以使用stringr::str_extract_all

y <- stringr::string_extract_all(dat$Column2,"ATI|FU|TP1|BL")