Превратить адрес улицы в компоненты - PullRequest
0 голосов
/ 19 марта 2019

У меня есть адресные данные, которые я извлек из SQL и теперь загрузил в R. Я пытаюсь извлечь отдельные компоненты, а именно ZIP-CODE в конце запроса (State также подойдет). Я хотел бы, чтобы почтовый индекс и штат были в новых отдельных столбцах.

Основная проблема заключается в том, что почтовый индекс иногда состоит из 5 цифр, а иногда 9.

Два примера строки будут:

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

Я подозреваю, что мне понадобится какая-то запись регулярного выражения \\d{5} или какая-то необычная манипуляция в dplyr, о которой я не знаю.

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Если почтовый индекс всегда в конце, вы можете использовать

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

Чтобы добавить столбец "zip" через dplyr, вы можете использовать

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. Почтовый индекс следует сразу после пробела, следующего за состоянием
1 голос
/ 19 марта 2019

Предполагая, что почтовый индекс всегда в конце, вы можете попробовать:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...