Базовый подход, находит промежуток между числом и именем, заменяет его, мы надеемся, нейтральным символом (в данном случае _
, но это может быть все, что, как вы знаете, не указано ни в одном адресе), затем разделяется наэтот символ.
Предполагается, что последнее «слово», содержащее число, является концом компонента «Нет».Если это не верно для всех ваших адресов (это для всех ваших тестовых случаев), это не сработает.
add <- c("5 Ark Royal House" ,
"22A Blington Garden Lincoln Street",
"Flat 19 PICTON HOUSE" ,
"2-3 Royal Albert Court" ,
"Room 1 Grand Hall",
"No 17 The Dell Alpha House")
split_add <- strsplit(gsub('([0-9\\-]+[0-9A-z]*) ', '\\1_', add), split='_')
aim <- setNames(as.data.frame(do.call(rbind, split_add)),
c('No', 'Building'))
aim
#> No Building
#> 1 5 Ark Royal House
#> 2 22A Blington Garden Lincoln Street
#> 3 Flat 19 PICTON HOUSE
#> 4 2-3 Royal Albert Court
#> 5 Room 1 Grand Hall
#> 6 No 17 The Dell Alpha House
Создано в 2019-02-19 с помощью пакета представ. (v0.2.1)