You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言处理患者地址:判断401是否在30相关字符前标记目标住址

患者地址匹配解决方案

需求为标记居住在401 30th street的患者,核心校验规则:地址包含完整的401门牌号,且401出现在30相关街道标识(30/30th/30st/e30/e30th/east30等)之前,同时排除30后接其他数字(如300、305)、401属于长数字片段(如40120)的误匹配场景。

示例数据

数据预览

序号ADDRESS预期Outcome
1401 300th stFALSE
240120 30 streetFALSE
330 401 plzFALSE*
4401 30th stTRUE
5401 e gibbsborro rd, 305FALSE
6401 e 30th street, shelterTRUE
7401 east 30stTRUE
8401 e30th street, 3TRUE
977-02 30th ave, 3rd flFALSE
10401 e30 st.TRUE

*注:原示例中第3条标记为TRUE,不符合401在前的规则,应为输入笔误。如果业务确实需要将该类场景标记为TRUE,可调整正则为前后顺序双向匹配即可。

样本数据构造代码

location <- structure(list(ADDRESS = c("401 300th st", "40120 30 street", 
"30 401 plz", "401 30th st", "401 e gibbsborro rd, 305", "401 e 30th street, shelter", 
"401 east 30st", "401 e30th street, 3", "77-02 30th ave, 3rd fl", 
"401 e30 st."), Outcome = c(FALSE, FALSE, TRUE, TRUE, FALSE, 
TRUE, TRUE, TRUE, FALSE, TRUE)), class = "data.frame", row.names = c(NA, 
-10L))

现有代码问题

原有实现仅判断地址同时包含401和30相关标识,未校验二者先后顺序,也未排除30后接其他数字、401属于长数字片段的误匹配场景,会出现大量错误标记。

优化后实现代码

使用正则表达式的顺序匹配+负向先行断言规则,一次性完成所有校验:

library(dplyr)

location <- location %>%
  mutate(
    ADDRESS = tolower(ADDRESS),
    st30 = grepl("\\b401\\b.*?\\b(30|30th|30st|e30|e30th|east30)\\b(?!\\d)", ADDRESS, perl = TRUE)
  )

正则规则说明

  • \\b401\\b:匹配完整的401单词,避免匹配40120这类包含401的长数字
  • .*?:非贪婪匹配401和30相关标识之间的任意字符(如空格、e、east等中间字符)
  • \\b(30|30th|30st|e30|e30th|east30)\\b:匹配指定的30相关街道标识
  • (?!\\d):负向先行断言,排除30后面接其他数字的场景(如300、305等)

内容的提问来源于stack exchange,提问作者mar355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:24:06