You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:50:45