R语言如何使用dplyr过滤含指定任意字符的向量元素
R语言dplyr方案:过滤含指定字符集任意字符的向量元素
str_detect本身支持多字符匹配,之前只能匹配单个字符是因为没有构造正确的匹配规则,配合dplyr的流处理写法可以直接实现需求:
- 依赖说明:
str_detect属于stringr包,和dplyr同属tidyverse生态,可直接配套使用 - 核心逻辑:将待过滤的字符集拼接为正则字符类
[待过滤字符列表],该模式可命中包含列表内任意一个字符的元素,取反后即可保留符合要求的结果
可复现代码
library(dplyr) library(stringr) # 原始数据定义 characters_to_filter <- ",.#" myVector <- c("Mac.", "ved", "der,", "ght#", "hoy") # 构造正则匹配模式 filter_pattern <- paste0("[", characters_to_filter, "]") # 执行过滤 myNewVector <- myVector %>% keep(~ !str_detect(.x, pattern = filter_pattern))
运行后myNewVector的输出和预期完全一致:
> myNewVector [1] "ved" "hoy"
注意事项
如果待过滤的字符集中包含正则特殊符号(比如\、]、^这类),先对单个字符做转义处理再拼接模式即可,避免正则解析错误:
# 鲁棒版模式构造,适配含特殊正则字符的过滤场景 filter_pattern <- characters_to_filter %>% str_split("") %>% pluck(1) %>% str_escape() %>% paste0(collapse = "") %>% paste0("[", ., "]")
内容的提问来源于stack exchange,提问作者iTookAPill
相关产品推荐
相关产品推荐

