R如何编写函数将含指定前缀的字符向量拆分为前缀与剩余子串
R语言指定前缀拆分函数实现
base R 无依赖实现
无需安装额外第三方包,直接在原生R环境中运行:
split_by_prefix <- function(input_vec, target_prefix) { # 构造匹配规则:仅匹配开头为指定前缀的字符串 match_pattern <- paste0("^(", target_prefix, ")(.*)$") # 执行正则匹配 match_result <- regexec(match_pattern, input_vec) extract_content <- regmatches(input_vec, match_result) # 生成前缀向量和剩余内容向量 prefix_vec <- sapply(extract_content, function(item) { if (length(item) == 3) item[2] else "" }) suffix_vec <- sapply(extract_content, function(item) { if (length(item) == 3) item[3] else item[1] }) return(list(prefix = prefix_vec, suffix = suffix_vec)) }
调用测试
# 输入向量 id <- c("A01A01", "A01B01", "A01C01", "R", "S", "T") # 传入参数,指定匹配前缀为A01 output <- split_by_prefix(id, "A01") # 提取结果 a <- output$prefix b <- output$suffix
运行后得到的a和b与需求的预期输出完全一致。
可选:stringr 简化实现
如果项目中已经使用tidyverse生态,可使用stringr包简化代码:
library(stringr) split_by_prefix <- function(input_vec, target_prefix) { match_pattern <- paste0("^(", target_prefix, ")(.*)$") match_mat <- str_match(input_vec, match_pattern) prefix_vec <- ifelse(is.na(match_mat[,2]), "", match_mat[,2]) suffix_vec <- ifelse(is.na(match_mat[,2]), input_vec, match_mat[,3]) return(list(prefix = prefix_vec, suffix = suffix_vec)) }
内容的提问来源于stack exchange,提问作者ggg
相关产品推荐
相关产品推荐

