You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中提取地址文本里数字起始的有效地址部分?

解决R中提取格式不一致地址的有效部分问题

针对你遇到的地址字段冗余前缀/后缀长度不固定的情况,固定单词数提取的word()函数无法适配所有场景,推荐用正则表达式基于地址特征(有效地址均以数字开头)精准提取,以下是可行方案:

方案思路

  1. 移除前缀冗余:匹配字符串开头到第一个数字之前的所有内容,替换为空,直接定位有效地址的起始点
  2. 移除末尾冗余:清除地址末尾的非核心信息(如示例中的apartment 111)

代码实现

方法1:使用stringr包(语法更简洁)

library(stringr)

# 示例数据
dispatchid <- c(1,2,3,4,5,6)
address <- c("123 test st", "in front of 456 second st", "across the parking lot of 123 fourty one ave east","678 fourth ave w", "hospital, back entrance, 890 fifth road east", "123 sixth blvd apartment 111")
data <- data.frame(dispatchid, address)

# 清洗地址
data$clean_address <- str_replace(data$address, "^.*?(?=\\d)", "") %>% 
  str_replace("\\sapartment.*$", "")

# 查看结果
print(data$clean_address)

方法2:Base R实现(无需额外安装包)

# 示例数据
dispatchid <- c(1,2,3,4,5,6)
address <- c("123 test st", "in front of 456 second st", "across the parking lot of 123 fourty one ave east","678 fourth ave w", "hospital, back entrance, 890 fifth road east", "123 sixth blvd apartment 111")
data <- data.frame(dispatchid, address)

# 清洗地址
data$clean_address <- sub("^.*?(?=\\d)", "", data$address, perl = TRUE)
data$clean_address <- sub("\\sapartment.*$", "", data$clean_address)

# 查看结果
print(data$clean_address)

正则规则说明

  • ^.*?(?=\\d):^匹配字符串开头,.*?非贪婪匹配任意字符,(?=\\d)正向预查第一个数字的位置,替换后直接保留从数字开始的内容
  • \\sapartment.*$:匹配空格+apartment及后续所有内容,替换为空以移除末尾冗余;如果有其他类似后缀(如suite/unit),可扩展为\\s(apartment|suite|unit).*$

运行后得到的clean_address列即为期望的有效地址:

[1] "123 test st"               "456 second st"             "123 fourty one ave east"  
[4] "678 fourth ave w"          "890 fifth road east"       "123 sixth blvd"

内容的提问来源于stack exchange,提问作者user13893942

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:53:17