【问题标题】:Count word occurrences in R计算 R 中的单词出现次数
【发布时间】:2021-11-17 15:23:45
【问题描述】:

是否有计算特定关键字包含在数据集中的次数的功能?

例如,如果dataset <- c("corn", "cornmeal", "corn on the cob", "meal"),则计数为 3。

【问题讨论】:

    标签: string r


    【解决方案1】:

    让我们暂时假设您想要包含“玉米”的元素的数量:

    length(grep("corn", dataset))
    [1] 3
    

    在您更好地了解 R 的基础知识后,您可能需要查看“tm”包。

    编辑:我意识到这一次您想要任何-“玉米”,但将来您可能想要获得单词-“玉米”。在 r-help 上,Bill Dunlap 指出了一种更紧凑的 grep 模式来收集整个单词:

    grep("\\<corn\\>", dataset)
    

    【讨论】:

    • 你可以在“”上分割向量,做唯一的并在整个事情上运行表格。 :)
    • 对。这突出了原始问题的歧义。我不明白为什么 4 是正确的数字。您的方法将为“玉米”返回 2,为“膳食”返回 1,为“玉米面”返回 1。计算以空格分隔的单词“corn”的 greppish 方法可能是:length(grep("^corn$|^corn | corn$", dataset))
    • 打错字了,抱歉。计数为 3。
    • 也就是说,我赞成并接受了您的回答。再次感谢!虽然我不明白 Roman 将向量拆分为“”并做“唯一”是什么意思。
    • 我认为他在引号之间输入了一个空格,这会给你一个“整个单词”的列表。 cmets显示的比例字体可能让你觉得没有空格。
    【解决方案2】:

    另一种非常方便直观的方法是使用stringr包的str_count函数:

    library(stringr)
    dataset <- c("corn", "cornmeal", "corn on the cob", "meal")
    
    # for mere occurences of the pattern:
    str_count(dataset, "corn")
    # [1] 1 1 1 0
    
    # for occurences of the word alone:
    str_count(dataset, "\\bcorn\\b")
    # [1] 1 0 1 0
    
    # summing it up
    sum(str_count(dataset, "corn"))
    # [1] 3
    

    【讨论】:

    • 如果要计算向量成员内的出现次数,此方法更好。在此示例中:dataset &lt;- c("corn corn", "cornmeal", "corn on the cob", "meal") 将返回 # [1] 2 1 1 0,而 grep 将始终返回 # [1] 1 1 1 0。 `
    • 嗨,如果我想这样做但使用字典怎么办?假设我有字典 A,我想知道字典 A 中的单词在数据集中出现了多少次,其中 (1) 相同单词的重复和 (2) 不同单词的迭代都包含在总和中?我用字典尝试了 sum(str_count()),但它只包括字典中唯一单词出现的次数,而不包括单词的重复。
    • 听起来像是一个新问题,而不是评论。我建议您打开一个新问题并添加一些代码示例(示例数据、迄今为止尝试过的事情、您想要获得的结果)来勾勒出您的问题,以便于理解。
    【解决方案3】:

    您还可以执行以下操作:

    length(dataset[which(dataset=="corn")])
    

    【讨论】:

      【解决方案4】:

      我只是用字符串除法来做:

      library(roperators)
      
      dataset <- c("corn", "cornmeal", "corn on the cob", "meal")
      
      # for each vector element:
      dataset %s/% 'corn'
      
      # for everything:
      sum(dataset %s/% 'corn') 
      

      【讨论】:

        【解决方案5】:

        您可以使用 stringr 包中的 str_count 函数来获取与给定字符向量匹配的关键字的数量。

        str_count 函数的 pattern 参数接受可用于指定关键字的正则表达式。

        正则表达式语法非常灵活,可以匹配整个单词以及字符模式。

        例如,以下代码将计算字符串“corn”的所有出现次数并返回 3:

        sum(str_count(dataset, regex("corn")))
        

        要匹配完整的单词,请使用:

        sum(str_count(dataset, regex("\\bcorn\\b")))
        

        "\b" 用于指定单词边界。使用 str_count 函数时,单词边界的默认定义包括撇号。因此,如果您的数据集包含字符串“corn's”,它将被匹配并包含在结果中。

        这是因为撇号默认被视为单词边界。为防止计算包含撇号的单词,请使用参数 uword = T 的 regex 函数。这将导致正则表达式引擎使用 unicode TR 29 定义的单词边界。见http://unicode.org/reports/tr29/tr29-4.html。此定义不将撇号视为单词边界。

        以下代码将给出单词“corn”出现的次数。不包括“玉米”等词。

        sum(str_count(dataset, regex("\\bcorn\\b", uword = T)))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-24
          相关资源
          最近更新 更多