You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 11:54:06