R语言如何批量删除数据框列中货币符号及单位字符仅保留数值
解决方法
核心逻辑是用正则匹配所有不属于数值组成部分的字符(非负号、非数字、非小数点),一次性批量删除,再转为数值类型即可,不需要逐个指定要删除的符号或单位。
方案1:Base R 实现
适合不想加载额外包的场景,可批量处理多列:
# 指定所有需要清洗的数值列名 cols_to_clean <- c("var1", "var2") # 批量替换杂字符并转数值 dataset[cols_to_clean] <- lapply(dataset[cols_to_clean], function(col) { # [^-0-9.] 表示匹配所有不是-、数字、小数点的字符,替换为空 as.numeric(gsub(pattern = "[^-0-9.]", replacement = "", x = col)) })
方案2:tidyverse 实现
适配你提供的tibble格式数据集,代码更简洁,支持灵活选择列:
library(dplyr) dataset <- dataset %>% # 批量处理所有以var开头的列,也可以手动写c(var1, var2)指定列 mutate(across(starts_with("var"), ~ as.numeric(gsub("[^-0-9.]", "", .x))))
处理后结果验证
执行后var1、var2都会转为数值类型,对应内容如下:
| Event | var1 | var2 |
|---|---|---|
| Labour Costs YoY | 13.34 | 0.026 |
| Unemployment Change (000's) | 16.91 | -0.449 |
| Unemployment Rate | -1125.91 | 0.89 |
| Jobseekers Net Change | 1012.74 | 9.56 |
完全符合你要求的清洗效果,列数多的场景也不用手动逐个处理。
内容的提问来源于stack exchange,提问作者Jurgen
相关产品推荐
相关产品推荐

