在R语言中用向量索引替换字符串指定部分的实现方法
R语言替换字符串后缀为向量索引的实现方法
问题场景
给定如下R语言向量:
var <- c("b_express_xxx", "b_express_yy", "b_express_z")
需要将每个字符串中express_后的所有内容替换为该元素在向量中的索引,得到如下结果:
var_solution <- c("b_express_1", "b_express_2", "b_express_3")
实现方法
方法一:基础gsub向量化写法
利用gsub的替换参数支持向量的特性,直接生成对应索引的替换字符串序列即可:
var_solution <- gsub("express_.*", paste0("express_", seq_along(var)), var)
- 说明:
seq_along(var)生成与原向量长度一致的索引序列c(1,2,3);paste0("express_", seq_along(var))拼接出每个元素对应的替换字符串c("express_1", "express_2", "express_3");gsub会逐个匹配原向量中每个字符串的express_.*(即express_后面的所有内容),并替换为对应的索引后缀。
方法二:stringr包简化写法
如果你习惯使用stringr字符串处理包,写法更直观:
library(stringr) var_solution <- str_replace(var, "express_.*", paste0("express_", seq_along(var)))
方法三:mapply遍历实现(兼容旧版R)
如果需要更显式的遍历逻辑,可以用mapply逐个处理每个元素和对应的索引:
var_solution <- as.vector(mapply(function(str, idx) { gsub("express_.*", paste0("express_", idx), str) }, var, seq_along(var)))
- 说明:
mapply会将原向量的每个元素和对应的索引传入匿名函数,完成替换后返回列表,最后用as.vector转换为普通字符向量。
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

