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

使用extract拆分地址字符串时如何避免NA并保留有效值?

问题场景

输入数据

street              housenumber
wallstreet 17-20    NULL
wafflestreet        5

原使用代码

extract("street", c("street", "housenumber"), "(\\D+)(\\d.*)")

注:代码存在拼写错误,housnumber应为housenumber

原输出结果

street         housenumber
wallstreet     17-20
NA             NA

问题

如何避免出现NA值?如何保留“wafflestreet”及其对应的“housenumber”值?


解决方案

1. 修正正则匹配逻辑

原正则(\D+)(\d.*)强制要求字符串必须包含「非数字段+数字段」,但wafflestreet没有数字部分,导致匹配失败返回NA。我们可以把数字段设为可选分组,同时将非数字段改为非贪婪匹配,避免吃掉街道名后的空格:

extract("street", c("new_street", "new_housenumber"), "(\\D+?)(\\d.*)?", remove = FALSE)

这里(\d.*)?表示数字段是可选匹配,\D+?的非贪婪模式能精准截取到数字部分之前的街道名。

2. 合并提取值与原有列值

第二行的housenumber原本就有有效值5,我们需要用coalesce函数将提取得到的字段与原有字段合并——优先取提取后的值,提取失败时沿用原有值:

library(dplyr)
library(tidyr)

df %>%
  extract(street, c("ext_street", "ext_housenumber"), "(\\D+?)(\\d.*)?", remove = FALSE) %>%
  mutate(
    street = coalesce(ext_street, street),
    housenumber = coalesce(ext_housenumber, housenumber)
  ) %>%
  select(-ext_street, -ext_housenumber)

3. 最终效果

执行后会得到符合预期的结果:

street         housenumber
wallstreet     17-20
wafflestreet   5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:27:16