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

R语言中提取id列-PRD前数字并替换原列的方法

高效提取分组数据框ID列中-PRD前的数字

针对你的需求,这里提供两种高效处理方案,适配不同量级的数据集:

方法1:Tidyverse 生态处理(适合习惯dplyr的用户)

直接用stringr的正则提取功能,配合dplyr修改分组数据框的列,不用提前取消分组:

library(dplyr)
library(stringr)

# 匹配-PRD前的连续数字,替换id列
grouped_df <- grouped_df %>%
  mutate(id = str_extract(id, "\\d+(?=-PRD)"))

正则\\d+(?=-PRD)是正向预查,能精准定位所有在-PRD之前的数字,不管前缀是2个还是3个字母都能适配。

方法2:Data.table 极速处理(超大数据集首选)

如果数据量特别大,data.table的内存效率和运行速度会更有优势,同样用正则实现:

library(data.table)

# 把分组数据框转成data.table(如果原本不是)
setDT(grouped_df)

# 方案A:用str_extract提取
grouped_df[, id := str_extract(id, "\\d+(?=-PRD)")]

# 方案B:用gsub替换,效果一致
grouped_df[, id := gsub("^\\D+(\\d+)-PRD.*", "\\1", id)]

^\\D+(\\d+)-PRD.*这个正则会先匹配开头的所有非数字字符,然后捕获后面的数字组,最后把整个字符串替换成捕获到的数字,逻辑清晰且高效。

注意点

  • 两种方法都支持直接修改分组数据框,无需先执行ungroup();
  • 正则已经兼容前缀字母数量不固定的情况;
  • 超大规模数据优先选data.table方案,能显著节省时间和内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:40:34