У меня есть этот образец данных:
address <- c("11537 W LARKSPUR RD EL MIRAGE 85335", "6702 E CPT DREYFUS SCOTTSDALE 85254", "114 S PUEBLO ST GILBERT 85233", "16981 W YOUNG ST SURPRISE 85388")
person <- c("Maria", "Jose", "Adan", "Eva")
my_address <- tibble(person, address)
Мне нужно извлечь city
из столбца address
. Город может состоять из 1 слова или 2, но они всегда перед почтовым индексом, состоящим из 5 цифр .
Из фрейма данных я хотел бы получить: "EL MIRAGE", "SCOTTSDALE" и "GILBERT" в новом столбце: city
Важно:
Города всегда после 2 или 3 буквенных слов, таких как: ST, AVE, RD.
Например, от: «16981 W YOUNG ST SURPRISE 85388». Я хотел бы получить СЮРПРИЗ, который стоит после "ST".
Итак, я пробовал это регулярное выражение:
my_address$city <-gsub("(.*)([a-zA-Z])([0-9]{5})(.*)", "\\2", my_address$address)
Но он возвращает весь текст в столбце, а не нужные города. Кроме того, я заметил, что я не поручил ему проверять 1 или 2 слова перед 5 цифрами, поэтому он будет извлекать только 1 слово?
ОБНОВЛЕНИЕ 1:
string1 <- "114 S PUEBLO ST GILBERT 85233"
sapply(stringr::str_extract_all(string1,"\\w{4,}"),"[",3)
возвращает: 85233
, когда ожидалось GILBERT
.