R语言使用separate函数拆分汽车名称列出现内容错位问题
汽车Name列拆分解决方案
问题原因
原代码使用separate()按空格固定拆分为3列,会将车型内部包含的空格识别为拆分分隔符,导致车型、配置版本列错位。
核心拆分逻辑
符合业务规则的拆分规则为:
- 第一个空格前的内容为品牌(Make)
- 最后一个空格后的内容为配置版本(Variant)
- 两段中间的所有内容(允许包含空格)为车型(Model)
推荐解决方案:使用tidyr::extract()正则匹配拆分
extract()支持按正则分组直接提取对应列,适配可变长度的车型内容,代码如下:
library(tidyverse) new_data_split = new_working %>% extract( col = Name, into = c("Make", "Model", "Variant"), # 正则分组规则:(品牌) 中间任意内容(车型) (配置版本) regex = "^(\\S+)\\s+(.*)\\s+(\\S+)$", remove = FALSE )
边界兼容调整
如果存在部分条目没有配置版本(仅包含品牌+车型),可调整正则为可选匹配,缺失的Variant自动填充为NA:
new_data_split = new_working %>% extract( col = Name, into = c("Make", "Model", "Variant"), regex = "^(\\S+)\\s+(.*?)(?:\\s+(\\S+))?$", remove = FALSE )
效果验证
针对示例Suzuki Wagon R VXL,拆分结果为:
- Make: Suzuki
- Model: Wagon R
- Variant: VXL
完全符合业务预期。
内容的提问来源于stack exchange,提问作者ahad lone
相关产品推荐
相关产品推荐

