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

R语言数据集处理:为重复ID的学生生成唯一4位字符标识符

为重复毕业记录生成唯一ID的解决方案

需求背景

原数据集中,部分学生因多次毕业(获取多个学位)存在重复ID,需要为这些重复记录生成唯一的4位字母数字组合ID(支持两位字母加两位数字的格式),确保新ID不与原有ID重复,最终合并得到完整数据集。

完整代码实现

首先加载并查看原数据:

mydata <- data.frame(id = c("R001", "R002", "R002", "R003", "R003", "R003"),
                   year = c(2014, 2014, 2015, 2014, 2015, 2017),
                   maledummy = c(1,0,0, 1,1,1))

步骤1:拆分非重复与重复ID记录

# 筛选非重复ID记录(保留每个ID的第一条记录)
mydata1 <- mydata[!duplicated(mydata["id"]),]

# 筛选重复ID记录(每个ID除第一条外的其他记录)
mydata2 <- mydata[duplicated(mydata["id"]),]

步骤2:生成唯一随机ID

提供两种方案,按需选择:

方案1:4位随机字母数字组合(无固定格式)

定义生成唯一ID的函数,确保新ID不与原有ID重复:

generate_unique_ids <- function(n, existing_ids) {
  chars <- c(letters, 0:9)  # 包含小写字母和数字
  ids <- character(0)
  while(length(ids) < n) {
    new_id <- paste0(sample(chars, 4, replace = TRUE), collapse = "")
    # 确保新ID既不在已有ID中,也不与已生成的新ID重复
    if(!new_id %in% c(existing_ids, ids)) {
      ids <- c(ids, new_id)
    }
  }
  ids
}

# 为mydata2生成对应数量的唯一ID
new_ids <- generate_unique_ids(nrow(mydata2), mydata$id)
# 替换mydata2中的ID
mydata2$id <- new_ids
方案2:严格两位字母+两位数字格式

如果需要严格遵循原计划的格式,使用以下函数:

generate_letter_num_ids <- function(n, existing_ids) {
  # 生成所有可能的两位字母组合
  letters_part <- expand.grid(letters, letters) |> apply(1, paste0, collapse = "")
  # 生成所有可能的两位数字组合(补零)
  nums_part <- sprintf("%02d", 0:99)
  # 组合所有可能的ID
  all_possible <- expand.grid(letters_part, nums_part) |> apply(1, paste0, collapse = "")
  # 排除已存在的ID,确保唯一性
  available <- setdiff(all_possible, existing_ids)
  # 随机抽取n个唯一ID
  sample(available, n)
}

# 生成并替换ID
new_ids <- generate_letter_num_ids(nrow(mydata2), mydata$id)
mydata2$id <- new_ids

步骤3:合并数据集并查看结果

# 合并非重复与更新后的重复记录
mydatafinal <- rbind(mydata1, mydata2)
# 输出最终结果
print(mydatafinal)

说明

  • 两种方案都确保新生成的ID全局唯一,不会与原有ID或其他新ID重复;
  • 方案2的两位字母+两位数字格式共有2626100=67600种可能,足够应对绝大多数数据集规模;
  • 如果需要大写字母,只需将letters替换为LETTERS即可。

内容的提问来源于stack exchange,提问作者Albert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:47