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

如何统计R语言DataFrame指定列变量中多个指定字符的出现次数

问题原因
  • str_count函数的向量化匹配规则:当输入的string参数为长度n的向量、pattern参数为长度m的向量时,会自动循环匹配两个向量的元素,而不是对每个string分别匹配所有pattern。你的代码中word列长度为4,pattern长度为2,实际匹配逻辑为:第1个单词匹配"a"、第2个匹配"p"、第3个匹配"a"、第4个匹配"p",得到的计数结果为c(1, 0, 1, 3)。
  • dplyr::mutate中直接调用sum()会对整列结果做全局聚合,返回长度为1的标量,因此所有行的num_ap都等于全局求和结果1+0+1+3=5。
解决方法

方法1:调整匹配规则(推荐)

将多个匹配字符合并为正则或的模式,长度为1的pattern会对每个单词分别统计所有匹配字符的总次数,无需额外求和:

library(tidyverse)
dat <- tibble(id = 1:4, word = c("apple", "banana", "pear", "pineapple"))
dat <- dat %>% mutate(num_ap = str_count(word, "a|p"))

方法2:逐行计算

如果需要保留多个pattern的写法,可以通过rowwise()指定逐行运算,sum仅对当前行的匹配结果求和:

dat <- dat %>% 
  rowwise() %>% 
  mutate(num_ap = sum(str_count(word, c("a", "p")))) %>% 
  ungroup() # 运算完成后取消行分组,避免影响后续操作

方法3:用映射函数处理

使用purrr::map_dbl对每个单词单独做匹配和求和:

dat <- dat %>% 
  mutate(num_ap = map_dbl(word, ~sum(str_count(.x, c("a", "p")))))

以上三种方法都可以得到你预期的num_ap结果c(3, 3, 2, 4)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:02