R语言使用正则匹配实现data.table子集筛选的问题咨询
问题原因
你使用的%in%是精确字符串匹配运算符,不会将codes中的.识别为正则通配符,仅会匹配与codes元素完全一致的字符串,因此得到空返回结果。
解决方法
你需要将多个模式拼接为单个正则表达式,使用正则匹配函数grepl或者data.table自带的%like%运算符完成筛选:
library(data.table) code_id <- data.table(val = c("pat11", "pat11", "pat21", "pat22", "x05ZX", "x05q2", "x05qb", "x05td", "x05xd", "x05qb")) codes <- c("pat2.", "x05td", "x05q.") # 拼接多个模式为单个正则表达式,|代表逻辑或 pattern <- paste(codes, collapse = "|") # 筛选匹配的行后去重 result <- unique(code_id[grepl(pattern, val)])
如果你的code_id未自定义列名,默认第一列列名为V1,将代码中的val替换为V1即可直接运行。
这里的.不需要额外转义,正则语法中.默认就是匹配任意单个字符的通配符,刚好符合你的需求;只有当你需要匹配字面量的.时,才需要转义为\\.。
运行后得到的结果与你预期一致,包含值:pat21、pat22、x05td、x05q2、x05qb。
内容的提问来源于stack exchange,提问作者Jim Maas
相关产品推荐
相关产品推荐

