【问题标题】:Count number of occurrences when string contains substring计算字符串包含子字符串时出现的次数
【发布时间】:2016-02-22 20:40:10
【问题描述】:

我有类似的字符串

'abbb'

我需要了解我可以找到多少次子字符串 'bb'。

grep('bb','abbb')

返回1。因此,答案是2(a-bb 和 ab-bb)。如何按我需要的方式计算出现次数?

【问题讨论】:

标签: r


【解决方案1】:

您可以使用'(?=bb)' 使模式不消耗,如下所示:

length(gregexpr('(?=bb)', x, perl=TRUE)[[1]])
[1] 2

【讨论】:

  • 如果我们 grep 单个子字符串它确实有效,但如果我们必须查找多个子字符串并且必须使用循环,它就不起作用。 x=c('aa','bb','ba') 长度(gregexpr('(?=x[2])', x, perl=TRUE)[[1]])
  • 循环似乎不可避免。
【解决方案2】:

这是一个使用 substr 和 sapply 的丑陋方法:

input <- "abbb"

search <- "bb"


res <- sum(sapply(1:(nchar(input)-nchar(search)+1),function(i){
  substr(input,i,i+(nchar(search)-1))==search
}))

【讨论】:

    【解决方案3】:

    我们可以使用stri_count

    library(stringi)
    stri_count_regex(input, '(?=bb)')
    #[1] 2
    
    stri_count_regex(x, '(?=bb)')
    #[1] 0 1 0
    

    数据

    input <- "abbb"
    x <- c('aa','bb','ba')
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 2012-02-12
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      相关资源
      最近更新 更多