1

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

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
4

2 回答 2

2

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

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

这也会在stringi stringretc 包中使用它们的str_extractstri_extract函数进行类比 - 请参阅上面的@mnel 和他的答案。

于 2016-02-04T01:22:24.080 回答
1

你可以使用stringr::str_extract_all

y <- stringr::string_extract_all(dat$Column2,"ATI|FU|TP1|BL")
于 2016-02-04T01:24:19.140 回答