在数据匹配之前,我需要从一系列地址中删除街道类型(St,Blvd,Rd等),作为清理步骤。我正在使用下面的代码,但是对于某些地址,结果缺少我要保留的部分街道。
library(tidyverse)
c("9123 GLENOAKS BLVD","123 E AVENUE K6 STE B","123 CAMP PLENTY RD","900 E VICTORIA ST","460 SAN FERNANDO RD","176 S SANTA FE AVE STE 9") %>%
sub("AVE.*$|ST.*$| BLVD.*$| RD.*$| PL.*$| 3RD.*$| APT.*$| DR.*$", "", .)
[1] "9123 GLENOAKS" "123 E " "123 CAMP" "900 E VICTORIA " "460 SAN FERNANDO" "176 S SANTA FE "
下面是预期的输出
[1] "9123 GLENOAKS" "123 E AVENUE K6 " "123 CAMP PLENTY" "900 E VICTORIA " "460 SAN FERNANDO" "176 S SANTA FE "
答案 0 :(得分:2)
您可以使用
sub("(.*?)\\s+(?:AVE|STE?|BLVD|RD|PL|3RD|APT|DR)\\b.*", "\\1", .)
详细信息
(.*?)
-第1组(该组将保留替换模式中用\1
引用的值):尽可能少的0个字符或更多字符\s+
-1个或多个空格(?:AVE|STE?|BLVD|RD|PL|3RD|APT|DR)
-字符串替代列表:AVE
,ST
或STE
,BLVD
,RD
,{{1} },PL
,3RD
或APT
DR
-单词边界\b
-输入的其余部分。