r - 如何计算R中数据框中某个单词的每次出现?
问题描述
以下是我在 R 中的数据框中的条目的一些示例。
- [1] “0”
- [2] 《温暖》
- [3]“触摸”
- [4] 《刺痛》
- [5]“触摸,压力”
- [6]《压力》
- [7] 《刺痛,其他(描述)》
- ETC...
我想计算以下单词的每一次出现:疼痛、刺痛、触摸、抓挠、其他(描述)、压力、痒痒、温暖、寒冷。
但是,当我这样做
sum(DF=="Touch")
时,它只计算某人仅输入“触摸”但例如不输入“触摸,压力”的单元格。我如何计算出现“触摸”这个词的每个单元格,无论它是否与另一个词一起出现?任何帮助将不胜感激:),我只是想不通。
解决方案
如果我们想计算一个子字符串单词,然后使用grepl
来查找特定的单词模式,通过使用 循环遍历数据集lapply
,Reduce
通过按元素添加 ( +
) 并获取sum
向量的
sum(Reduce(`+`, lapply(DF, grepl, pattern = "\\bTouch\\b")))
#[1] 5
或者它可以变得紧凑,如果我们将数据更改matrix
为as.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))
推荐阅读
- mongodb - 如何使用 mongo 查询根据字典的键之一找到作为字典的数组元素的索引?
- vbscript - vbscript 不会在 8Mb 之后读取文件
- visual-studio-2019 - Uno 平台 - 在 Visual Studio 扩展管理器中找不到
- java - 使用 Java fileReader 拆分后如何从 CSV 打印数据?
- python-3.x - 如何使用 requests_toolbelt 在 Python 3.7 中编码数据
- python - LDA Topic Modelling : Topics predicted from huge corpus make no sense
- c++ - 为什么调试时程序崩溃但正常(使用代码块)
- c++ - WASM 链接错误:函数签名不匹配
- elasticsearch - 如何在 ELK 中进行实时警报
- vba - 使用 VBA 在 SAP GUI 中查找组件