R语言无分隔符列拆分:如何提取末尾两位数字外的前缀编码
R语言拆分混合编码列的解决方案
核心思路是通过正则锚定字符串末尾的两位数字,不需要固定前缀长度即可完成拆分。
适配任意长度前缀的extract写法
你只需要修改extract函数的正则规则即可:
# 需先加载tidyr包,若使用tidyverse合集可直接加载tidyverse library(tidyr) df <- data.frame(code=rep(c('2d01', '2m04', '3C06', 'CrD05'), each=10), pos=rep(c(3, 7,2,4), times=20)) df <- extract(df, code, into = c("code","number"), regex = "(.*)(\\d{2})$")
正则规则说明
(.*):第一个捕获组,匹配末尾两位数字之前的所有内容,适配任意长度的编码前缀(\\d{2})$:第二个捕获组,\\d{2}匹配两位数字,$将匹配位置锚定在字符串末尾,保证只会提取最后两位的数字作为number列
拆分后CrD05会被拆分为CrD(code列)和05(number列),其余短前缀的编码也可正常拆分。
可选实现(基于dplyr+stringr)
如果你更习惯用字符串提取的显式写法,也可以用如下代码实现相同效果:
library(tidyverse) df <- df %>% mutate( number = str_extract(code, "\\d{2}$"), code = str_remove(code, "\\d{2}$") )
内容的提问来源于stack exchange,提问作者Gonzalo de Quesada
相关产品推荐
相关产品推荐

