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

在R中基于四列跨两个数据框分配唯一ID的实现方案

为R语言数据框选手分配统一唯一ID的实现方案

问题背景

现有两个R数据框:

  • master.treeDQ2:每行包含两位选手信息,第11列是选手1姓名、第12列是选手1所属健身房;第13列是选手2姓名、第14列是选手2所属健身房
  • rank_table:每行仅包含一位选手的姓名(competitor列)

需基于姓名+健身房的组合分配唯一ID,满足以下要求:

  • 同时出现在选手1和选手2位置的同一选手(姓名+健身房一致),ID必须相同
  • 为选手2位置中未在选手1位置出现过的选手分配新ID
  • 将master.treeDQ2中生成的ID同步到rank_table的对应选手行

原代码仅能为选手1生成唯一ID,现提供完整实现方案。

完整实现代码

# 读取数据
rank_table = read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/rank_table_complete2.csv')
master.treeDQ2 = read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/master.treeDQ.edited_draft6.csv')

# 步骤1:生成全局唯一ID映射表
# 提取所有选手的姓名+健身房组合
comp1 <- master.treeDQ2[, c(11, 12)]
names(comp1) <- c("name", "gym")

comp2 <- master.treeDQ2[, c(13, 14)]
names(comp2) <- c("name", "gym")

# 合并去重后分配连续ID
all_competitors <- rbind(comp1, comp2)
all_unique <- unique(all_competitors)
all_unique$ID <- seq(nrow(all_unique))

# 步骤2:为master.treeDQ2添加ID1和ID2列
# 匹配选手1的ID
master.treeDQ2 <- merge(master.treeDQ2, all_unique,
                        by.x = c(11, 12), by.y = c("name", "gym"),
                        all.x = TRUE)
names(master.treeDQ2)[ncol(master.treeDQ2)] <- "ID1"

# 匹配选手2的ID
master.treeDQ2 <- merge(master.treeDQ2, all_unique,
                        by.x = c(13, 14), by.y = c("name", "gym"),
                        all.x = TRUE)
names(master.treeDQ2)[ncol(master.treeDQ2)] <- "ID2"

# 步骤3:同步ID到rank_table
# 若rank_table包含健身房列,将by参数改为c("competitor", "gym")以避免同名冲突
rank_table <- merge(rank_table, all_unique,
                    by.x = "competitor", by.y = "name",
                    all.x = TRUE)

代码说明

  1. 全局ID映射:先收集所有选手的姓名+健身房组合,去重后给每个唯一组合分配连续ID,确保同一选手ID唯一且统一,解决了跨选手位置的ID一致性问题
  2. master.treeDQ2赋值:通过merge函数分别匹配选手1和选手2的组合,生成对应的ID1和ID2列,保证同一选手在不同位置ID相同
  3. rank_table同步:利用全局映射表将ID匹配到rank_table中,若rank_table存在同名不同健身房的选手,需补充健身房列后再匹配,避免ID错误

期望输出示例

master.treeDQ2简化输出

comp01 gym1 ID1    comp02 gym2 ID2 
A      w      1    D      z      4
A      w      1    D      z      4
B      x      2    A      w      1
B      x      2    D      z      4
B      x      2    D      z      4
C      y      3    A      w      1
C      y      3    B      x      2

rank_table简化输出

competitor ID
C          3
D          4 
D          4     
A          1
B          2
B          2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:05:24