gpt4 book ai didi

regex - R 中的计数模式匹配

转载 作者:行者123 更新时间:2023-12-04 16:53:18 26 4
gpt4 key购买 nike

如何有效地计算一个字符串出现在另一个字符串中的实例数?

以下是我迄今为止的代码。它成功地识别出一个字符串的任何实例是否出现在另一个字符串中。但是,我不知道如何将其从 TRUE/FALSE 关系扩展到计数关系。

x <- ("Hello my name is Christopher. Some people call me Chris")
y <- ("Chris is an interesting person to be around")
z <- ("Because he plays sports and likes statistics")

lll <- tolower(list(x,y,z))
dict <- tolower(c("Chris", "Hell"))

mmm <- matrix(nrow=length(lll), ncol=length(dict), NA)

for (i in 1:length(lll)) {
for (j in 1:length(dict)) {
mmm[i,j] <- sum(grepl(dict[j],lll[i]))
}
}
mmm

它产生:
       [,1] [,2]
[1,] 1 1
[2,] 1 0
[3,] 0 0

由于小写字符串“chris”在 lll[1] 中出现了两次我要 mmm[1,1]是 2 而不是 1。

真实的例子是更高的维度......所以如果代码可以被向量化而不是使用我的强力循环,我会很高兴。

最佳答案

两个快速提示:

  • 避免双循环,你不需要它;)
  • 使用 stringr包裹

  • library(stringr)

    dict <- setNames(nm=dict) # simply for neatness
    lapply(dict, str_count, string=lll)
    # $chris
    # [1] 2 1 0
    #
    # $hell
    # [1] 1 0 0

    或者作为矩阵:
    #  sapply(dict, str_count, string=lll)
    # chris hell
    # [1,] 2 1
    # [2,] 1 0
    # [3,] 0 0

    关于regex - R 中的计数模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666965/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com