R语言中如何移除除a列外其余所有列的非数字字符
R语言批量移除多列非数字字符实现方案
核心需求
保留数据框a列原始内容不做修改,批量清除其余所有列中包含的非数字字符,优先提供tidyverse语法实现。
测试原始数据
library(tidyverse) d = tibble(a = c("Tom", "Mary", "Ben", "Jane", "Lucas", "Mark"), b = c("8P", "3", "6", "7", "5M", "U1"), c = c("2", "12", "6F", "7F", "Y1", "9I")) d
tidyverse实现代码
通过dplyr::across()选中非a列的所有字段,配合stringr的正则替换功能批量清除非数字字符:
d_clean <- d %>% mutate(across( .cols = -a, # 匹配所有非数字字符替换为空,如需转数值类型可在末尾加 %>% as.numeric() .fns = ~ str_replace_all(.x, "\\D", "") ))
运行结果
执行代码后得到的清洗后数据如下,a列完全保留原始内容,b、c列仅保留数字:
# A tibble: 6 × 3 a b c <chr> <chr> <chr> 1 Tom 8 2 2 Mary 3 12 3 Ben 6 6 4 Jane 7 7 5 Lucas 5 1 6 Mark 1 9
补充说明
- 正则表达式中
\\D等价于[^0-9],作用是匹配所有非0-9的字符 - 如果后续需要对清洗后的列做数值运算,把注释里的
as.numeric()加上即可,直接得到数值类型的列 - 代码不需要手动指定除
a外的其他列名,后续数据框新增列时会自动纳入处理范围,适合宽表批量处理场景
内容的提问来源于stack exchange,提问作者st4co4
相关产品推荐
相关产品推荐

