我有从SQL中提取的地址数据,现在已加载到R中。我正在尝试提取单个组件,即查询末尾的邮政编码(状态也很好)。我希望将邮政编码和州放在新的单独列中。
主要问题是邮政编码有时是5位数字,有时是9位数字。
两个示例行将是:
Address_FULL
1234 NOWHERE ST WASHINGTON DC 20005
567 EVERYWHERE LN CHARLOTTE NC 22011-1203
我怀疑我需要某种正则表达式\\d{5}
表示法,或者我不知道存在的dplyr中的某种奇特操作。
答案 0 :(得分:2)
如果邮政编码始终在结尾,则可以使用
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 :(得分:1)
假设邮政编码始终在结尾,您可以尝试:
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"
答案 2 :(得分:0)
使用我的包裹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"