如何使用stringr::str_remove_all处理字符串得到目标数值向量?
解决方案
你可以通过两种可靠的方式实现需求:
方法1:提取数字部分(鲁棒性强,适用于后缀格式有变化的情况)
使用stringr::str_extract匹配字符串中的数字(包含可选小数点),再转为数值类型:
library(stringr) X <- c("9 % vol.", "6.5 % vol.", "8.5 % vol.", "10 % vol.", "7.5 % vol.") result <- as.numeric(str_extract(X, "\\d+\\.?\\d*")) print(result)
输出:
[1] 9.0 6.5 8.5 10.0 7.5
方法2:精准移除固定后缀(适合后缀完全统一的场景)
因为你的每个字符串后缀都是 % vol.,可以直接移除该固定内容,再转数值:
library(stringr) X <- c("9 % vol.", "6.5 % vol.", "8.5 % vol.", "10 % vol.", "7.5 % vol.") result <- as.numeric(str_remove(X, " % vol\\.")) print(result)
输出同上。
原代码问题分析
你之前的代码stringr::str_remove_all(x, "[ //%//vol.]")出错的原因:
- 正则字符类
[]中的.会匹配任意字符,包括数字里的小数点,导致6.5的.被移除,变成65 - 正则里不需要用
//转义%,%不是正则特殊字符,多余的//无意义 - 字符类中的
v、o、l会被单独匹配移除,同时误删了数字的小数点
内容的提问来源于stack exchange,提问作者user10904839
相关产品推荐
相关产品推荐

