【问题标题】:Turn Street Address Into Components将街道地址变成组件
【发布时间】:2019-03-19 18:12:32
【问题描述】:

我有从 SQL 中提取的地址数据,现在已加载到 R 中。我正在尝试提取各个组件,即查询末尾的 ZIP-CODE(状态也很好)。我希望 ZIP-CODE 和 State 出现在新的单独列中。

主要问题是邮政编码有时是 5 位数,有时是 9。

两个示例行是:

Address_FULL
1234 NOWHERE ST WASHINGTON DC 20005
567 EVERYWHERE LN CHARLOTTE NC 22011-1203

我怀疑我需要某种正则表达式\\d{5} 表示法,或者在我不知道存在的 dplyr 中进行某种花哨的操作。

【问题讨论】:

  • 预期输出是什么?
  • 使用正则表达式解析地址时要非常小心。本文解释了使用正则表达式进行解析时可能出现的问题。 smartystreets.com/articles/…

标签: r regex dplyr street-address


【解决方案1】:

如果邮政编码总是在最后,你可以使用

str_extract(Address_FULL,"[[:digit:]]{5}(-[[:digit:]]{4})?$")

要通过dplyr 添加“zip”列,您可以使用

df %>% mutate(zip = str_extract(Address_FULL,"[[:digit:]]{5}(-[[:digit:]]{4})?$"))

df 是您的数据框,其中包含 Address_FULL 和 str_extract() 来自stringr

状态可以如下提取:

str_extract(Address_FULL,"(?<=\\s)[[:alpha:]]{2}(?=\\s[[:digit:]]{5})")

但是,这做了以下假设

  1. 州缩写为 2 个字符
  2. 州缩写后紧跟一个空格
  3. 邮政编码紧跟在州后面的空格之后

【讨论】:

    【解决方案2】:

    假设zip总是在最后,你可以试试:

    tail(unlist(strsplit(STRING, split=" ")), 1)
    

    例如

    ex1 = "1234 NOWHERE ST WASHINGTON DC 20005"
    ex2 = "567 EVERYWHERE LN CHARLOTTE NC 22011-1203"
    
    > tail(unlist(strsplit(ex1, split=" ")), 1)
    [1] "20005"
    
    > tail(unlist(strsplit(ex2, split=" ")), 1)
    [1] "22011-1203"
    

    【讨论】:

    • 这实际上工作得很好,因为分隔符总是一个空格。然后我可以为提取状态做同样的事情。感谢您的帮助。
    【解决方案3】:

    使用我的包tfwstring

    自动适用于任何地址类型,包括前缀和后缀。

    if (!require(remotes)) install.packages("remotes")
    remotes::install_github("nbarsch/tfwstring")
    
    parseaddress("1234 NOWHERE ST WASHINGTON DC 20005", force_stateabb = F)
    
         AddressNumber         StreetName StreetNamePostType          PlaceName          StateName            ZipCode 
                "1234"          "NOWHERE"               "ST"       "WASHINGTON"               "DC"            "20005" 
    
    parseaddress("567 EVERYWHERE LN CHARLOTTE NC 22011-1203", force_stateabb = F)
    
         AddressNumber         StreetName StreetNamePostType          PlaceName          StateName            ZipCode 
                 "567"       "EVERYWHERE"               "LN"        "CHARLOTTE"               "NC"       "22011-1203" 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多