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

