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
相关产品推荐
相关产品推荐

