【问题标题】:Find and return multiple independent strings查找并返回多个独立字符串
【发布时间】:2016-02-04 01:08:20
【问题描述】:

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

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

【问题讨论】:

  • 那么,您的预期输出绝对与您尝试做的不匹配?在您的grepl 中,您尝试将ATI 替换为Analytical treatment interruption。我在你的输出中没有看到这个。它在这里有什么关系?还是您的预期输出是部分的,只是一个 XY 问题?

标签: r string-matching grepl


【解决方案1】:

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

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

这将在 stringi stringr 等软件包中使用它们的 str_extractstri_extract 函数进行类比 - 请参阅上面的 @mnel 和他的答案。

【讨论】:

    【解决方案2】:

    你可以使用stringr::str_extract_all

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

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2013-06-24
      • 2017-02-12
      相关资源
      最近更新 更多