R用地点名称和空格分隔邮政编码

时间:2019-01-10 19:31:51

标签: r regex string

任何人都可以提出一些建议,将带有位置名称的邮政编码分隔为“邮政编码”和“位置”,我的数据如下:

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 :(得分:1)

这会做到

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')

答案 1 :(得分:0)

每个邮政编码都以数字结尾,这样就足够了:

membership rows