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

R语言使用str_extract提取指定区间编码生成数据框新列

R实现编码区间提取方案

你原有str_extract的提取逻辑可以直接复用,仅需调整正则匹配规则即可,对百万级数据量的运行效率无明显影响,且和你之前生成CODE_A列的匹配标准完全统一。

匹配规则说明

两列的匹配范围严格对齐需求:

  • CODE_X:匹配两类编码,一是C开头、后缀数字覆盖000-999全区间的编码,二是D开头、后缀数字在000-499区间的编码
  • CODE_Y:仅匹配D开头、后缀数字在500-999区间的编码
  • 非目标区间的编码会自动返回NA(即留空),符合要求

实现代码

先确保已加载stringr包,再运行以下代码生成新列:

library(stringr)

# 提取C000-C999、D000-D499区间编码到CODE_X列
dados$CODE_X <- str_extract(
  dados$CODE,
  "(?i)\\b(?:C\\W*\\d{3}|D\\W*[0-4]\\d{2})\\b"
)

# 提取D500-D999区间编码到CODE_Y列
dados$CODE_Y <- str_extract(
  dados$CODE,
  "(?i)\\b(?:D\\W*[5-9]\\d{2})\\b"
)

正则逻辑说明

正则完全沿用了你之前写CODE_A时的兼容规则:

  • 保留(?i)参数:不区分字母大小写,c001、d352这类小写开头的编码也可正常匹配
  • 保留\\W*逻辑:兼容字母和数字之间存在非单词字符的场景,比如C 001、D-480这类格式不会漏匹配
  • 新增末尾\\b单词边界:避免误匹配到超过3位数字的长编码(比如D4990、C1234这类不符合编码规则的值不会被提取)
  • 数字区间判断逻辑:
    • C段直接匹配3位任意数字,全覆盖C000-C999区间
    • D000-D499段:匹配D后第一位数字为0-4、后两位为任意数字的组合,刚好覆盖000-499范围
    • D500-D999段:匹配D后第一位数字为5-9、后两位为任意数字的组合,刚好覆盖500-999范围

匹配效果验证

用你给出的Code示例值运行后,结果如下:

原始Code值CODE_X列值CODE_Y列值
A005空空
A200空空
B300空空
C001C001空
C999C999空
D000D000空
D352D352空
D480D480空
D501空D501
D999空D999
E480空空

特殊场景适配

如果你的Code列存在数字位数不固定的编码(比如C1、D23这类不足3位的情况),可以将正则调整为以下版本,适配可变长度数字的匹配:

# 适配数字位数不固定的CODE_X提取规则
dados$CODE_X <- str_extract(dados$CODE, "(?i)\\b(?:C\\W*\\d+|D\\W*[0-4]\\d*)\\b")
# 适配数字位数不固定的CODE_Y提取规则
dados$CODE_Y <- str_extract(dados$CODE, "(?i)\\b(?:D\\W*[5-9]\\d*)\\b")

如果你的编码都是固定1位字母+3位数字的标准格式,优先使用前面的固定位数正则,匹配精度更高。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:48:21