如何在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
相关产品推荐
相关产品推荐

