R语言make.unique后缀从2开始且保留首元素无后缀的实现方法
自定义custom.make.unique是这类通用场景下的最优解决方案,原生的make.unique不支持自定义后缀起始编号、分隔符,也无法保证和原字符串末尾自带的数字不冲突,自定义函数仅需数行代码即可满足需求,实现如下:
custom.make.unique <- function(x, sep = "_") { # 兼容因子类型输入 x <- as.character(x) # 按元素值分组,统计每个元素的出现次序 count <- ave(rep(1, length(x)), x, FUN = seq_along) # 首次出现保留原值,重复元素追加对应次序的后缀 ifelse(count == 1, x, paste0(x, sep, count)) }
测试你提供的示例向量:
vec <- c("a1", "b2", "c3", "b2", "d", "a1", "b2", "d", "e", "b1", "a2", "b3", "a2") custom.make.unique(vec)
输出结果:
[1] "a1" "b2" "c3" "b2_2" "d" "a1_2" "b2_3" "d_2" "e" "b1" "a2" "b3" "a2_2"
该方案的优势如下:
- 完全符合需求:首次出现的元素保留原值,重复元素从2开始追加下划线后缀
- 通用性强:不受原字符串末尾自带数字的影响,也不要求元素按规律排列,适配所有字符/因子向量场景
- 灵活性高:支持自定义分隔符,如果你需要其他分隔符比如点号,调用时传入
sep = "."即可 - 效率高:纯R内置函数实现,无第三方依赖,向量化运算逻辑适合处理十万级以上的长向量
内容的提问来源于stack exchange,提问作者julien.leroux5
相关产品推荐
相关产品推荐

