如何用filter和str_detect筛选含joint向量元素的df数据集?
解决方案
当然可以结合使用filter和str_detect实现这个需求,具体实现如下:
步骤说明
- 构建正则匹配规则:把
joint向量里的所有元素拼接成一个正则表达式,用|分隔表示"匹配任意一个元素"。 - 执行数据筛选:用
dplyr::filter配合stringr::str_detect,检查o3.cpt列是否包含上述规则中的任意一个元素。
完整代码
library(tidyverse) joint <- c(27130, 27132, 27134, 27137, 27138, 27445, 27447, 27486, 27487) df <- data.frame( oid = seq(1, 7), o3.cpt = c("27130I", "33333", "27134RI", "11111", "27138", "44444", "66666") ) # 构建正则匹配模式 match_pattern <- paste(joint, collapse = "|") # 筛选符合条件的行 df_filtered <- df %>% filter(str_detect(o3.cpt, match_pattern)) # 查看筛选结果 df_filtered
输出结果
oid o3.cpt 1 1 27130I 2 3 27134RI 3 5 27138
补充说明
如果需要确保仅匹配字符串开头的五位编码(避免中间出现相同数字串导致误匹配),可以修改匹配模式为:
match_pattern <- paste0("^", joint, collapse = "|")
这里的^表示正则匹配的起始位置,能保证五位编码是字符串的开头部分。
内容的提问来源于stack exchange,提问作者J.K.
相关产品推荐
相关产品推荐

