R语言按行统计单词出现次数(每行仅计一次)的代码实现方案
解决每行仅统计一次目标单词的问题
我明白你的需求啦——你想要统计数据框中包含目标单词"x"的总行数,不管每行里"x"出现多少次,只要出现了就算1次。原来的sum(str_count(data, "x"))会统计所有单元格里"x"的出现次数总和,这显然不是你要的结果,我来帮你修改代码:
方法一:用rowSums + grepl
这是比较高效的实现方式,适合处理较大的数据集:
library(stringr) var1 <- c("x", "x", "x", "x", "x", "x", "y", "y", "y", "y") var2 <- c("x", "x", "b", "b", "c", "d", "e", "y", "g", "h") var3 <- c("x", "x", "b", "b", "c", "d", "e", "y", "g", "h") data <- data.frame(cbind(var1, var2, var3)) # 统计包含"x"的总行数 total <- sum(rowSums(grepl("x", data)) > 0) print(total) # 输出:6
代码解释:
grepl("x", data):生成一个和data维度一致的逻辑矩阵,每个单元格的值为TRUE(包含"x")或FALSE(不包含"x")rowSums(grepl("x", data)):计算每行中包含"x"的单元格数量rowSums(...) > 0:将每行转换为逻辑值,只要该行有至少一个"x"就返回TRUEsum(...):对逻辑向量求和(TRUE会被视为1,FALSE视为0),最终得到包含"x"的总行数
方法二:用apply逐行检查
如果你更喜欢逐行处理的直观写法,也可以用apply:
total <- sum(apply(data, 1, function(row) any(grepl("x", row)))) print(total) # 输出:6
代码解释:
apply(data, 1, ...):按行遍历数据框的每一行function(row) any(grepl("x", row)):对每一行检查是否有任意一个元素包含"x",返回TRUE或FALSEsum(...):同样对逻辑向量求和得到总行数
两种方法都能得到你预期的结果6,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者onlyjust17
相关产品推荐
相关产品推荐

