R语言按文本模式拆分服饰属性列 提取Size/Colors/Sold By字段
R语言混合属性列拆分方案
针对服饰属性列存在字段缺失、连接符(冒号/短横线)混用的场景,直接用stringr的正则匹配即可实现稳定拆分,不需要复杂的循环或长段逻辑。
核心匹配规则
完全贴合需求设计提取逻辑,自动兼容格式差异:
- Size列:仅提取
Size标识后的2位尺码编码,无Size字段的行自动返回NA - Colors列:提取
Colours标识后到下一个逗号前的完整颜色值,自动去除前后多余空格 - Sold By列:提取
Sold By标识后到第一个逗号前的完整销售方名称,自动去除前后多余空格
可直接运行的代码
# 加载依赖包,未安装可先运行 install.packages(c("dplyr","stringr")) library(dplyr) library(stringr) # 构造样例测试数据 df <- data.frame( raw_attr = c( "Size:AS - Adult Small, Colours: Black , Sold By: Elmwood", "Size:YS - Youth Small, Colours: Black, Sold By: Rosemary Brown PS", "Colours - Black, Sold By: Rosemary Brown PS" ) ) # 执行拆分 df_result <- df %>% mutate( Size = str_extract(raw_attr, "(?<=Size\\s*[:\\-]\\s*)[A-Z]{2}"), Colors = str_extract(raw_attr, "(?<=Colours\\s*[:\\-]\\s*).*?(?=\\s*,)") %>% str_trim(), Sold_By = str_extract(raw_attr, "(?<=Sold By\\s*[:\\-]\\s*).*$") %>% str_remove(",.*$") %>% str_trim() )
运行结果
拆分后输出结果完全符合预期:
| Size | Colors | Sold_By |
|---|---|---|
| AS | Black | Elmwood |
| YS | Black | Rosemary Brown PS |
| NA | Black | Rosemary Brown PS |
适配说明
- 正则已兼容字段名与连接符、连接符与字段值之间存在任意数量空格的情况,同时支持冒号、短横线两种连接符
- 如果实际数据中尺码编码不是2位大写字母,可调整Size提取规则中
[A-Z]{2}部分的匹配逻辑即可 - 若后续字段顺序调整,当前正则依然可以正常匹配,不需要修改代码逻辑
内容的提问来源于stack exchange,提问作者Prasenjit Datta
相关产品推荐
相关产品推荐

