如何从AB前缀字符串片段中提取AB与-间的4位数字至独立列?
提取AB与短横线间4位数字的几种方法
先拿示例数据演示操作:
library(dplyr) library(tidyr) library(stringr) # 模拟你的数据 df <- tibble( code = c("AB1997-147", "AB1997-150", "AB2000-001") )
方法1:一步到位用extract提取
不用先拆分,直接通过正则分组提取目标数字,最省心:
df %>% extract( code, into = "target_year", # 新列的名字 regex = "AB(\\d{4})-.*", # 括号里的\\d{4}就是要抓的4位数字 remove = FALSE # 保留原code列,方便核对 )
正则说明:AB匹配固定前缀,(\\d{4})捕获4位数字作为提取内容,-.*匹配后面的短横线及剩余部分。
方法2:基于已拆分的ABxxxx列处理
如果你已经用separate拆分出了类似ABxxxx的列(比如叫prefix),可以用两种方式分离数字:
方式A:用str_extract抓取数字
# 先拆分出prefix列(模拟你已经完成的步骤) df_split <- df %>% separate(code, into = c("prefix", "suffix"), sep = "-", remove = FALSE) # 从prefix里提取4位数字 df_split %>% mutate(target_year = str_extract(prefix, "\\d{4}"))
方式B:用separate按AB位置拆分
用正向零宽断言,在AB后面拆分,不用硬编码长度:
df_split %>% separate( prefix, into = c("ab_prefix", "target_year"), sep = "(?<=AB)", # 意思是:在AB后面的位置拆分 remove = FALSE )
内容的提问来源于stack exchange,提问作者odar
相关产品推荐
相关产品推荐

