如何在R语言中使用stringr提取唯一的字符串匹配模式?
在R中提取字符串唯一匹配项的方法
针对你遇到的提取后保留唯一匹配项的需求,有两种高效的实现方式:
方法1:先提取所有匹配,再去重
先用str_extract_all提取全部匹配结果,再通过unique()过滤重复值。设置simplify = TRUE可将结果转为矩阵,转成向量后去重更便捷:
library(stringr) # 第一个示例输入 examples <- c("G06F", "G06F", "H04L", "H04L", "H04L", "H04L", "H04L") # 提取前3个字符(可根据你的匹配规则调整正则表达式) extracted <- str_extract_all(examples, "^.{3}", simplify = TRUE) %>% as.vector() # 去重得到唯一值 unique(extracted) # 输出: [1] "G06" "H04" # 第二个示例输入 input2 <- c("B01J", "B01J", "B22F", "B22F", "B22F", "G01N") extracted2 <- str_extract_all(input2, "^.{3}", simplify = TRUE) %>% as.vector() unique(extracted2) # 输出: [1] "B01" "B22" "G01"
若未设置simplify = TRUE,结果会是列表格式,需先用unlist()展开再去重:
extracted_list <- str_extract_all(examples, "^.{3}") unique(unlist(extracted_list))
方法2:先对原向量去重,再提取(更高效)
如果原向量存在大量重复元素,先通过unique()去重原数据,再用str_extract提取,能减少不必要的计算,提升处理速度:
# 第一个示例 examples_unique <- unique(examples) str_extract(examples_unique, "^.{3}") # 输出: [1] "G06" "H04" # 第二个示例 input2_unique <- unique(input2) str_extract(input2_unique, "^.{3}") # 输出: [1] "B01" "B22" "G01"
处理单字符串多匹配的场景
如果单个字符串中包含多个目标匹配项,需先提取所有匹配结果,再统一去重:
input3 <- c("G06F H04L", "G06F", "H04L B01J") # 提取所有符合格式的3位代码(正则匹配大写字母+数字组合) all_matches <- unlist(str_extract_all(input3, "\\b[A-Z0-9]{3}\\b")) # 去重 unique(all_matches) # 输出: [1] "G06" "H04" "B01"
内容的提问来源于stack exchange,提问作者AltairB
相关产品推荐
相关产品推荐

