如果我们想计算一个子字符串单词,那么使用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))