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

R语言提取数据框id列中第三个下划线后字符段的实现方法

提取id列第三个下划线后业务编码的R实现方案

针对你给定的规则化id字段,这里提供3种不同场景下可直接复用的代码,全部匹配示例数据的结构设计:

基础R无依赖实现(适配所有R版本,无需安装额外包)

  • 正则匹配替换法(处理百万级行数据时效率最高)
    直接运行即可生成目标列:
    df$business_code <- sub("^([^_]*_){3}", "", df$id)
    
    匹配逻辑说明:从字符串开头定位连续3组「非下划线字符+下划线」的冗余内容,将这部分替换为空,剩余文本就是第三个下划线后的全部字符。
  • 拆分取值法(逻辑直白,新手易理解)
    先按下划线拆分id文本,直接取拆分结果的第4个元素:
    df$business_code <- sapply(strsplit(df$id, "_"), `[`, 4)
    
    这个方法附带异常校验效果:如果某行id的下划线数量不足3个,会自动返回NA,可快速定位不符合规则的异常编码。

tidyverse生态实现(适合日常管道流代码场景)

  • 用stringr包做精准提取
    library(dplyr)
    library(stringr)
    df <- df %>%
      mutate(business_code = str_extract(id, "(?<=^([^_]*_){3}).*$"))
    
    逻辑说明:通过正向后顾正则,精准定位到第三个下划线的结束位置,直接截取后面的所有文本,无需做替换操作。
  • 用tidyr拆分整列(适合需要拆分全字段的场景)
    library(tidyr)
    df <- df %>%
      separate(
        col = id,
        into = c("affiliate_id", "part2", "part3", "business_code"),
        sep = "_",
        remove = FALSE,
        extra = "merge"
      )
    
    参数extra = "merge"可避免最后一段业务编码本身包含下划线时被强制截断,保证提取内容的完整性。

提取结果校验步骤

运行完任意一种方法后,可执行以下代码快速排查异常值:

# 打印所有提取结果为空的id行,无输出则代表所有编码提取正常
print(df$id[is.na(df$business_code)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 22:06:04