【问题标题】:How to extract a substring using sub and regular expression using example of street addresses in R?如何使用 R 中的街道地址示例使用子和正则表达式提取子字符串?
【发布时间】:2021-10-30 11:29:56
【问题描述】:

我有一个带有街道地址的数据框,其中一些地址带有或不带有单元号。我想将单元编号部分提取到一个新字段中。

library(dplyr)
library(stringr)

CivicAddress <- c("1000 FAKE STREET", "UNIT 1 1000 FAKE STREET", "UNIT 2 1000 FAKE STREET")
df2 <- data.frame(CivicAddress, stringsAsFactors = FALSE)
df2 <- df2 %>% 
  mutate(UnitNo = sub("\\s*UNIT \\S+\\s*", "", CivicAddress))

我能够成功匹配单元号,但我不确定如何表达表达式以使其仅返回单元号(例如,单元 1、单元 2)。目前我的代码去掉了单元号并返回地址的其余部分。

【问题讨论】:

  • sub("\\s*(UNIT \\S+)\\s.*|.*", "\\1", CivicAddress)
  • 如果您经常使用地址,可能值得查看一些用于处理地址的 r 包,例如 censusxypostmastr

标签: r regex


【解决方案1】:

我们可以将str_extract 与正则表达式环视一起使用

library(stringr)
library(dplyr)
df2 %>% 
  mutate(UnitNo = str_extract(CivicAddress, "(?<=UNIT )\\d+"))

-输出

             CivicAddress UnitNo
1        1000 FAKE STREET   <NA>
2 UNIT 1 1000 FAKE STREET      1
3 UNIT 2 1000 FAKE STREET      2

如果我们还需要 'UNIT' 子字符串

df2 %>%
   mutate(UnitNo = str_extract(CivicAddress, "UNIT \\d+"))

-输出

              CivicAddress UnitNo
1        1000 FAKE STREET   <NA>
2 UNIT 1 1000 FAKE STREET UNIT 1
3 UNIT 2 1000 FAKE STREET UNIT 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2011-12-15
    • 2021-09-25
    相关资源
    最近更新 更多