R语言如何从向量中提取匹配的多个子字符串模式
R 按子串匹配生成对应向量的实现方案
需求说明
现有两个测试向量:
patient_condition <- c("Pre_P1","Post_P1","Enriched_Post_P1","Post_P1_2","Pre_P2","Post_P2", "P3_Pre") to_match <- c("P1","P2","P3")
要求生成等长的新向量:对patient_condition的每个元素,返回to_match中作为该元素子串存在的值,预期输出如下:
[1] "P1" "P1" "P1" "P1" "P2" "P2" "P3"
实现方法
方法1:stringr包简洁实现(推荐)
直接用正则提取匹配值,代码最简洁,适配当前场景:
library(stringr) # 把待匹配值拼接成正则或模式,批量提取匹配项 result <- str_extract(patient_condition, str_c(to_match, collapse = "|"))
运行后result的值和预期输出完全一致。
方法2:基础R实现,无需安装第三方包
用sapply遍历每个元素做匹配,不需要加载额外包,兼容所有R版本:
result <- sapply( patient_condition, function(x) grep(x, to_match, value = TRUE), USE.NAMES = FALSE )
注意:如果后续数据中存在某个
patient_condition元素同时匹配多个to_match值的情况,上述两种方法默认返回最先匹配到的结果,可根据实际业务需求调整多匹配项的处理逻辑,当前测试用例不存在该问题,可直接运行得到正确结果。
内容的提问来源于stack exchange,提问作者ZainNST
相关产品推荐
相关产品推荐

