【问题标题】:Using pattern matching in R, how can I find if there are more than one matches per character string?在 R 中使用模式匹配,我怎样才能找到每个字符串是否有多个匹配项?
【发布时间】:2021-11-10 01:44:58
【问题描述】:

我有以下向量:

vector1 <- c("Frank frank", "Frank", "Fred", "frank")

我希望确定单词'Frank''frank' 在向量中出现了多少次。我想计算单个出现的次数并跟踪该模式在向量内的每个字符串中出现的次数。

结果应该是这样的:

2 1 0 1

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用str_count,将模式包装在修饰符中,例如regex 并使用附加参数,即 ignore_case,默认为 FALSE

    library(stringr)
    str_count(vector1, regex('Frank', ignore_case = TRUE))
    [1] 2 1 0 1
    

    或使用base R,将单词提取到list,然后计算列表的lengths,即每个列表元素的长度

    lengths(regmatches(vector1, gregexpr("[Ff]rank", vector1)))
    [1] 2 1 0 1
    

    【讨论】:

    • 酷 - 谢谢。有没有只使用base 函数的解决方案?
    • @DavidMoore 更新了帖子
    【解决方案2】:

    结合gregexprregmatches 可以是一种base-r 方法

    v = c("Frank frank", "Frank", "Fred", "frank")
    res = regmatches(v, gregexpr('frank', v, ignore.case = T))
    res 
    [[1]]
    [1] "Frank" "frank"
    
    [[2]]
    [1] "Frank"
    
    [[3]]
    character(0)
    
    [[4]]
    [1] "frank"
    
    lengths(res)
    
    [1] 2 1 0 1
    

    【讨论】:

      【解决方案3】:

      您还可以折叠“Frank”的两个版本或使用通用正则表达式:

      library(stringr)
      
      str_count(vector1, "[fF]rank")
      
      OR
      
      str_count(vector1, "Frank|frank")
      
      [1] 2 1 0 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        • 2013-06-22
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        相关资源
        最近更新 更多