如何用R语言的str_detect统计含至少两个指定字母的单词?
问题描述
给定R语言单词列表:
fruit <- c("apple", "banana", "pear", "pineapple", "papaya")
需统计其中**包含至少两个字母"p"**的单词数量(字母无需相邻,连续或间隔任意字符都符合要求),预期结果为3(对应apple、pineapple、papaya)。
尝试代码:
str_detect(fruit, "p[abcdefghijklmmoqrstuvwxyz]p")
但该代码无法匹配apple和pineapple,求覆盖所有符合条件单词的解决方案。
解决方案
方法1:统计字符出现次数(最直观)
用stringr包的str_count函数统计每个单词中"p"的出现次数,再筛选次数≥2的单词并计数:
library(stringr) fruit <- c("apple", "banana", "pear", "pineapple", "papaya") # 统计每个单词中"p"的数量 p_count <- str_count(fruit, fixed("p")) # 统计符合条件的单词总数 sum(p_count >= 2)
运行结果为3,完全符合预期。
方法2:正则表达式匹配
使用正向预查正则,匹配包含至少两个"p"的字符串:
library(stringr) fruit <- c("apple", "banana", "pear", "pineapple", "papaya") # 匹配包含至少两个"p"的单词 matches <- str_detect(fruit, "(?=.*p.*p)") # 统计匹配成功的数量 sum(matches)
同样得到结果3。
原代码问题分析
你写的正则p[abcdefghijklmmoqrstuvwxyz]p存在两个关键问题:
- 强制要求两个"p"之间必须有一个非"p"的字符,无法匹配连续的"p"(比如
apple里的pp); - 正则里重复写了字母
m,且遗漏了字母n,进一步缩小了匹配范围。
内容的提问来源于stack exchange,提问作者Ditto
相关产品推荐
相关产品推荐

