r街道类型删除模式匹配

时间:2019-04-15 15:39:56

标签: r substring

在数据匹配之前,我需要从一系列地址中删除街道类型(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 " 

1 个答案:

答案 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)-字符串替代列表:AVESTSTEBLVDRD,{{1} },PL3RDAPT
  • DR-单词边界
  • \b-输入的其余部分。