如何在R中使用正则表达式提取字符格式数值并过滤非数值项
R语言提取分组数据中的数值字符
针对你的grouped_df类型数据集,结合dplyr分组操作和正则表达式,可以快速提取mappedTerm列中的字符格式数值,移除非数值内容,具体实现如下:
核心思路
用正则表达式匹配纯数字序列,结合dplyr的分组数据处理能力,对每个分组的mappedTerm列进行清洗。
代码实现
首先加载必要的工具包:
library(dplyr) library(stringr)
基础提取(提取首个连续数字)
提取mappedTerm中第一个连续的数字序列,非数值内容会被替换为NA:
processed_data <- grouped_df %>% mutate( # 提取首个数字序列,无匹配则返回NA numeric_mapped = str_extract(mappedTerm, "\\d+") )
进阶处理
- 提取所有数字并拼接:如果
mappedTerm中存在分散的数字(比如"Rural3Urban5"),可以提取所有数字并拼接成完整数值:
processed_data <- grouped_df %>% mutate( numeric_mapped = str_c(str_extract_all(mappedTerm, "\\d+")[[1]], collapse = "") )
- 匹配小数数值:如果需要提取带小数的数值(比如"2.7"),修改正则表达式:
processed_data <- grouped_df %>% mutate( numeric_mapped = str_extract(mappedTerm, "\\d+\\.?\\d*") )
- 转换为数值类型:把提取到的字符型数值转为数值类型,方便后续分析:
processed_data <- grouped_df %>% mutate( numeric_mapped = as.numeric(str_extract(mappedTerm, "\\d+")) )
移除无数值的行(可选)
如果需要过滤掉没有提取到数值的行,添加filter操作:
processed_data <- grouped_df %>% mutate( numeric_mapped = as.numeric(str_extract(mappedTerm, "\\d+")) ) %>% filter(!is.na(numeric_mapped))
正则说明
\\d+:匹配1个或多个数字字符(0-9)\\d+\\.?\\d*:匹配整数或小数,允许小数点后有0个或多个数字
内容的提问来源于stack exchange,提问作者Rstudyer
相关产品推荐
相关产品推荐

