如何计算R中数据帧中某个单词的每次出现次数?

如何计算R中数据帧中某个单词的每次出现次数?,r,dataframe,count,unique,R,Dataframe,Count,Unique,下面是R中我的数据框中的一些条目示例 [1] “0” [2] “温暖” [3] “触摸” [4] “刺痛” [5] “接触、压力” [6] “压力” [7] 刺痛,其他(描述) 等等 我想数一数以下词语的每一次出现:疼痛、刺痛、触摸、抓挠、其他(描述)、压力、怕痒、温暖、寒冷 然而,当我 sum(DF==“Touch”) 它只统计有人只输入了“触摸”但没有输入“触摸、压力”的单元格。我如何计算单词“Touch”出现的每个单元格,无论它是否与另一个单词在一起?任何帮助都将不胜感激:),我就是想

下面是R中我的数据框中的一些条目示例

  • [1] “0”
  • [2] “温暖”
  • [3] “触摸”
  • [4] “刺痛”
  • [5] “接触、压力”
  • [6] “压力”
  • [7] 刺痛,其他(描述)
  • 等等
我想数一数以下词语的每一次出现:疼痛、刺痛、触摸、抓挠、其他(描述)、压力、怕痒、温暖、寒冷

然而,当我
sum(DF==“Touch”)

它只统计有人只输入了“触摸”但没有输入“触摸、压力”的单元格。我如何计算单词“Touch”出现的每个单元格,无论它是否与另一个单词在一起?任何帮助都将不胜感激:),我就是想不出来。

如果我们想计算子字符串单词,那么使用
grepl
查找特定的单词模式,方法是使用
lappy
循环数据集,
通过执行元素添加(
+
)来减少取向量的

sum(Reduce(`+`, lapply(DF, grepl, pattern = "\\bTouch\\b")))
#[1] 5
或者,如果我们将数据更改为
matrix
,使用
as.matrix

sum(grepl("\\bTouch\\b", as.matrix(DF)))
#[1] 5
注意:
\\b
-指定正则表达式中的单词边界。如果我们没有这些,那么它可能会与“触碰”、“触碰”和“触碰”相匹配


它可以包装在函数中

f1 <- function(dat, word) {
         pat <- paste0("\\b", word, "\\b")
         count <- sum(Reduce(`+`, lapply(dat, grepl, pattern = pat)))
       return(count)
  }

f1(DF, "Touch")
#[1] 5
数据
DF
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))