如何将变量中的字符串拆分并精准映射到对应新变量?
精准提取字符串中指定硬件参数的解决方案
问题背景
有一个字符型变量df$Specs,示例格式为:chr [1:28752] "4 GB RAM | 64 GB ROM | ExpandableUpto256GB",目标是创建RAM、ROM、ExpandableUpto三个新变量,分别提取对应内容,后续转换为数值型并统一为GB单位。
之前采用拆分字符串后按位置填充的方法,因部分行的Specs只有1或2个条目,导致内容错位(比如ROM内容跑到RAM列),需要实现仅提取含对应关键词的内容,避免位置填充的误差。
解决方案
直接使用stringr::str_extract基于关键词匹配提取内容,无需先拆分再合并,彻底解决错位问题:
1. 提取对应参数内容
library(dplyr) library(stringr) # 基于关键词匹配提取各参数 Mobile_phones_clean <- Mobile_phones6 %>% mutate( # 匹配包含RAM的参数段,兼容带/不带空格的格式 RAM = str_extract(Specs, "\\d+\\s*GB\\s*RAM"), # 匹配包含ROM的参数段 ROM = str_extract(Specs, "\\d+\\s*GB\\s*ROM"), # 匹配ExpandableUpto的参数段,兼容带/不带GB后缀的格式 ExpandableUpto = str_extract(Specs, "ExpandableUpto\\d+GB?") )
2. 转换为数值型(可选)
如果需要将提取的内容转为纯数值(方便后续分析),可以进一步处理:
Mobile_phones_clean <- Mobile_phones_clean %>% mutate( # 移除所有非数字字符,转为数值 RAM_num = as.numeric(str_remove_all(RAM, "\\D")), ROM_num = as.numeric(str_remove_all(ROM, "\\D")), ExpandableUpto_num = as.numeric(str_remove_all(ExpandableUpto, "\\D")) )
方案优势
- 不受参数条目数量影响:如果某行缺少ROM参数,
ROM列会返回NA,不会用其他参数填充 - 不受参数顺序影响:即使
Specs中参数顺序打乱(比如ROM在前RAM在后),依然能精准提取对应内容 - 兼容格式差异:正则表达式兼容参数中带/不带空格的情况(比如
4GBRAM或4 GB RAM都能匹配)
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

