R Разделите почтовый индекс названием места с пробелом. - PullRequest
0 голосов
/ 10 января 2019

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

my.data <- c("105 69 STOCKHOLM", "FI-40101 JYVÄSKYLÄ", "SE-831 88 ÖSTERSUND", 
    "85170 Le Poiré Sur Vie", "Chaoyang Distr.. CN-100027 BEIJING")

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

Надеюсь получить результат как

Postcode                     City
105 69                       STOCKHOLM
FI-40101                     JYVÄSKYLÄ
SE-831 88                    ÖSTERSUND
85170                        Le Poiré Sur Vie
Chaoyang Distr.. CN-100027   BEIJING

или если вы считаете, что это невозможно, пожалуйста, дайте мне комментарий

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Каждый почтовый индекс заканчивается цифрой, поэтому этого будет достаточно:

library(tidyverse)

my.data %>%
  str_match('(.*\\d) (.*)') %>%
  as_tibble() %>%
  select(2:3) %>%
  set_names(c('Postcode', 'City'))
0 голосов
/ 10 января 2019

Это сделало бы это

data.frame(postalCode = gsub('(.*\\d)\\D+$','\\1', my.data, perl = TRUE),
           city = gsub('.*\\d(\\D+)$','\\1', my.data, perl = TRUE),
           stringsAsFactors = FALSE)
#                   postalCode              city
# 1                     105 69         STOCKHOLM
# 2                   FI-40101         JYVÄSKYLÄ
# 3                  SE-831 88         ÖSTERSUND
# 4                      85170  Le Poiré Sur Vie
# 5 Chaoyang Distr.. CN-100027           BEIJING

Объяснение

Регулярное выражение .*\\d\\D+$ означает:

  • .* строка начинает что-то / что-нибудь до
  • \\d\\D+$ появляется последняя цифра, и все после нее не является цифрой
  • в postalCode мы фиксируем все от начала до последней цифры (в комплекте)
  • в city мы фиксируем все от последней цифры (исключая) до конца

Примечание

Вы, вероятно, не должны слишком полагаться на это для более общих случаев

# you can test and see what it yields with
my.data <- c(my.data,'postal 123 streetname 45 city', '831 88-SE Östersund')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...