【问题标题】:How to count every occurrence of a certain word in a dataframe in R?如何计算R中数据框中某个单词的每次出现?
【发布时间】:2020-12-23 23:43:13
【问题描述】:

以下是我在 R 中的数据框中的条目的一些示例。

  • [1]“0”
  • [2]“温暖”
  • [3]“触摸”
  • [4] “刺痛”
  • [5]“触摸,压力”
  • [6]“压力”
  • [7]“刺痛,其他(描述)”
  • 等等……

我想计算以下单词的每一次出现:疼痛、刺痛、触摸、抓挠、其他(描述)、压力、发痒、温暖、寒冷。

但是,当我这样做时 sum(DF=="Touch") 它只计算某人仅输入“触摸”但例如不输入“触摸,压力”的单元格。我如何计算出现“触摸”一词的每个单元格,无论它是否与另一个词一起出现?任何帮助将不胜感激:),我就是想不通。

【问题讨论】:

    标签: r dataframe count unique


    【解决方案1】:

    如果我们想计算一个子字符串单词,那么使用grepl 来查找特定的单词模式,通过使用lapplyReduce 循环遍历数据集并执行元素加法 (+) 和取向量的sum

    sum(Reduce(`+`, lapply(DF, grepl, pattern = "\\bTouch\\b")))
    #[1] 5
    

    如果我们将数据更改为matrixas.matrix,则可以使其更紧凑

    sum(grepl("\\bTouch\\b", as.matrix(DF)))
    #[1] 5
    

    注意:\\b - 指定正则表达式中的单词边界。如果我们没有这些,那么它可能会匹配 'Touching'、'Touchy' 和 'Touch'


    它可以被包装在一个函数中

    f1 <- function(dat, word) {
             pat <- paste0("\\b", word, "\\b")
             count <- sum(Reduce(`+`, lapply(dat, grepl, pattern = pat)))
           return(count)
      }
    
    f1(DF, "Touch")
    #[1] 5
    

    这也可以应用于多个单词

    sapply(c("Warm", "Touch"), function(x) f1(DF, x))
    # Warm Touch 
    #    2     5 
    

    数据

    DF <- structure(list(Col1 = c("0", "Warm", "Touch", "Tingling", 
         "Touch, Pressure", 
    "Pressure"), Col2 = c("Touch", "Warm", "0", "Tingling", "Touch, Pressure", 
    "Pressure, Touch")), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2023-04-04
      • 2014-08-24
      • 1970-01-01
      相关资源
      最近更新 更多