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

如何在R Studio中从客户地址列提取城镇至新列?

提取地址中的城镇信息到新列(R语言)

方法1:固定格式下用tidyr分割列

如果你的地址格式是固定的逗号分隔结构(比如示例里的「街道, 门牌号, 城镇, 州, 国家」),用tidyr::separate最省心:

先加载tidyverse工具包:

library(tidyverse)

运行代码分割列并提取城镇:

df <- df %>%
  separate(address, into = c("street", "house_num", "town", "state", "country"), 
           sep = ", ", extra = "merge", fill = "right")
  • sep = ", ":按「逗号+空格」的规则分割地址
  • extra = "merge":遇到地址里有多余逗号时,把额外内容合并到最后一列,避免报错
  • fill = "right":如果某些地址段数不够,自动补NA

方法2:按位置提取(灵活适配段数变化)

如果城镇始终是倒数第三个分隔段(比如有的地址前面字段可能有变动,但城镇在州和门牌号之间),用stringr的分割功能:

library(stringr)

# 直接提取第3段
df$town <- str_split(df$address, ", ", simplify = TRUE)[,3]

# 或者从后往前数,更稳妥(比如地址前面可能有额外字段)
df$town <- sapply(str_split(df$address, ", "), function(x) x[length(x)-2])

方法3:正则表达式(应对格式不固定的复杂情况)

如果地址格式不统一,但城镇名称只包含字母和空格,且后面跟着州和国家,可以用正则匹配精准提取:

df$town <- str_extract(df$address, "(?<=, )[A-Za-z ]+(?=, [A-Za-z ]+, [A-Z]{2,})")

这个正则的逻辑是:匹配「逗号+空格」之后、「逗号+州名+逗号+大写国家缩写」之前的字母+空格组合,适配大部分美式地址结构。如果你的国家格式不是大写缩写,调整最后一段正则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:10:25