You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"就返回TRUE
  • sum(...):对逻辑向量求和(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或FALSE
  • sum(...):同样对逻辑向量求和得到总行数

两种方法都能得到你预期的结果6,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者onlyjust17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 16:52:28