R语言如何从地址文本提取6位邮编生成数据框新列?
R提取地址中"Singapore"后6位邮政编码的实现方法
因为你已经明确6位邮编固定出现在关键词Singapore之后,直接用正则表达式匹配提取即可,10000行规模的数据处理速度极快,没有性能压力。
方法1:stringr包实现(推荐,写法简洁易读)
如果日常使用tidyverse生态,直接用str_extract做正向预查匹配即可:
library(stringr) # 正则逻辑:匹配"Singapore"加空格之后出现的连续6位数字 df$d <- str_extract(df$c, "(?<=Singapore\\s)\\d{6}")
如果部分地址里Singapore和邮编之间存在多个空格、标点(比如你示例中地址格式为, Singapore 248180),可以用兼容性更强的正则,通过捕获组提取:
# 兼容Singapore和邮编之间存在非数字间隔字符的场景 df$d <- str_match(df$c, "Singapore\\D+(\\d{6})")[, 2]
方法2:基础R实现(无需安装第三方包)
不想额外加载包的话,用R自带的正则处理函数也能实现:
# 开启perl兼容正则支持,做正向预查匹配 match_result <- regexpr("(?<=Singapore\\s)\\d{6}", df$c, perl = TRUE) df$d <- regmatches(df$c, match_result)
提取效果验证
用你给出的示例地址测试:
- 第一条地址
YVL WELLNESS CLINIC 510 CAMDEN STREET #01-01, Singapore 248180提取结果为248180 - 第二条地址
MOMO CLINIC 512 CHOA CHU KANG STREET, #10-1102, Singapore 150902提取结果为150902
内容的提问来源于stack exchange,提问作者Grace
相关产品推荐
相关产品推荐

