R语言:申请者与评审的无重复随机分配方案及扩展场景求助
R语言实现评审与申请者的随机分配方案
需求说明
- 评审列表:
reviewer1、reviewer2、reviewer3 - 核心规则:每个申请者分配2名不同评审,禁止同一评审重复分配给同一申请者
- 两种场景:
- 6名申请者:每位评审恰好完成4次评审
- 7名申请者:每位评审至少完成4次,其中2位完成5次
场景1:6名申请者(整除情况)
初始数据
reviewers <- c("reviewer1", "reviewer2", "reviewer3") applications <- data.frame( applicant = 1:6, reviewer1_assigned = NA, reviewer2_assigned = NA )
分配实现代码
# 初始化评审次数跟踪 reviewer_counts <- setNames(rep(0, length(reviewers)), reviewers) target_count <- 4 # 每位评审需完成的次数 for (i in 1:nrow(applications)) { # 筛选当前可用的评审:未达目标次数的评审 available_reviewers <- names(reviewer_counts[reviewer_counts < target_count]) # 随机抽取2名不同的评审 selected <- sample(available_reviewers, size = 2, replace = FALSE) # 更新数据框和次数跟踪 applications$reviewer1_assigned[i] <- selected[1] applications$reviewer2_assigned[i] <- selected[2] reviewer_counts[selected] <- reviewer_counts[selected] + 1 } # 查看结果 print(applications)
逻辑说明
- 用
reviewer_counts跟踪每个评审的已分配次数,确保不超过目标值4 - 每次为申请者随机抽取2名未达次数上限的不同评审
- 总评审次数为6*2=12,3名评审各4次,刚好匹配需求
场景2:7名申请者(非整除情况)
初始数据
只需修改applications的申请者数量:
applications <- data.frame( applicant = 1:7, reviewer1_assigned = NA, reviewer2_assigned = NA )
分配实现代码
# 初始化评审次数跟踪,设置不同的目标次数(2个5次,1个4次) reviewer_counts <- setNames(rep(0, length(reviewers)), reviewers) # 随机选2名评审设为5次目标,剩下1名4次 target_counts <- sample(c(5,5,4), size = 3, replace = FALSE) names(target_counts) <- reviewers for (i in 1:nrow(applications)) { # 筛选可用评审:未达自身目标次数的评审 available_reviewers <- names(reviewer_counts[reviewer_counts < target_counts]) # 随机抽取2名不同的评审 selected <- sample(available_reviewers, size = 2, replace = FALSE) # 更新数据框和次数跟踪 applications$reviewer1_assigned[i] <- selected[1] applications$reviewer2_assigned[i] <- selected[2] reviewer_counts[selected] <- reviewer_counts[selected] + 1 } # 查看结果和评审次数统计 print(applications) print("评审最终次数:") print(reviewer_counts)
逻辑说明
- 总评审次数为7*2=14,3名评审分配为5+5+4=14,刚好匹配
- 随机选择2名评审承担5次评审任务,确保分配公平性
- 同样通过次数跟踪确保每个评审不超过自身目标次数,同时保证申请者的2名评审不同
内容的提问来源于stack exchange,提问作者PCK1992
相关产品推荐
相关产品推荐

