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

R语言使用多个字面分隔符拆分数据框字符串的实现方法

R地址拆分需求实现方案

下面提供两种可单次调用完成拆分的简便方案,都不需要多次处理数据。

方法1:使用tidyr::extract()(推荐)

extract()支持通过正则分组直接提取多列内容,是最适配该需求的解法:

library(dplyr)
library(tidyr)

# 示例数据
df <- data.frame(ADDRESS = c("123 Main Street Unit A", "456 Main Street Apt 3", "789 Main Street Floor 2"))

# 拆分逻辑
df_result <- df %>%
  extract(
    col = ADDRESS,
    into = c("ADDRESS", "UNIT"),
    regex = "^(.*?)\\s+(Unit.*|Apt.*|Floor.*)$",
    remove = TRUE # 若需要保留原始地址列可改为FALSE
  )

正则逻辑说明:

  • ^(.*?) 匹配从字符串开头到「空格+Unit/Apt/Floor」之前的所有内容,对应街道地址
  • \\s+ 匹配两部分之间的空格
  • (Unit.*|Apt.*|Floor.*) 匹配以Unit/Apt/Floor开头的剩余所有内容,对应单元/楼层信息

方法2:使用separate()配合正则零宽断言

如果习惯使用separate(),可以给sep参数传入正向零宽断言正则,匹配三个分隔词前面的位置作为拆分点,不会吃掉分隔符:

df_result <- df %>%
  separate(
    col = ADDRESS,
    into = c("ADDRESS", "UNIT"),
    sep = "(?= (Unit|Apt|Floor))",
    extra = "merge"
  )

两种方法输出结果都和期望的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:05