【问题标题】:search for multiple occurrences of substring from string从字符串中搜索多次出现的子字符串
【发布时间】:2021-05-17 10:59:02
【问题描述】:

下面是我的数据集。我在key 列上使用函数strdetect(),就像这样。

str_detect(mydata$Key, 'R')

我希望能够搜索包含 2 个R 的字符串。显然,在下面的示例中,我可以只搜索 R002R009,但我并不总是没有附加到 R 的数字,所以我只想搜索带有 2 个 R 的字符串

我需要能够在 ifelse 语句中使用它

 mydata[1:3]
           IDENTIFIER  DATE_TIME         X-VALUE     Y-VALUE      Key
    1      214461707   1/04/2019 8:25           1         -3       A001
    2      214461789   1/04/2019 10:16          1         -2       R001
    3      214461789   1/04/2019 10:16          1         -5       R002R009

【问题讨论】:

    标签: r stringr


    【解决方案1】:

    您可以使用str_count 计算字母出现的次数,并在filter 中使用。

    library(dplyr)
    library(stringr)
    
    mydata %>% filter(str_count(Key, 'R') == 2)
    
    #   FACILITY_ID      DATE_TIME XVALUE YVALUE      Key
    #3   214461789 1/04/201910:16      1     -5 R002R009
    

    【讨论】:

    • 我需要能够在 if else 语句中使用它
    • 你这是什么意思?您想在ifelse 语句中检查什么?
    • 我在ifelse 语句str_detect(Key, 'R') 中使用以下代码,并根据我检测到子字符串创建一个新列
    • 这有意义吗?
    • 不,不是。因此,如果您在 ifelse 语句中使用 str_detect(Key, 'R'),那么计算 2 个 R 的作用是什么?另外我不明白创建一个新的列部分。您可以编辑您的帖子以显示预期的输出吗?
    【解决方案2】:

    您可以在 str_detect 中使用正则表达式。

    mydata %>% 
      filter(str_detect(string = Key, pattern = "R.*R"))
    

    结果:

             id FACILITY_ID DATE_TIME X.VALUE Y.VALUE      Key
    3 214461789   1/04/2019     10:16       1      -5 R002R009
    

    【讨论】:

      【解决方案3】:

      我们可以从base R使用subset

      subset(mydata, nchar(gsub('[^R]+', '', Key)) == 2)
      

      【讨论】:

        猜你喜欢
        • 2013-05-06
        • 1970-01-01
        • 2015-03-20
        • 2013-05-27
        • 1970-01-01
        • 2010-10-20
        • 2012-10-15
        相关资源
        最近更新 更多