基于已有分组分布为新增参与者随机分配分组的R实现问题
动态均等分配参与者分组的R实现
需求:需要给持续新增的参与者分配0或1分组,要求两组人数始终大致均等,新增参与者时需参考已有分组的人数分布。
原代码的问题:直接使用floor(runif(1, min=0, max=2))随机生成分组,完全不考虑现有分组的人数平衡,持续添加后容易出现两组人数差距过大的情况。
改进方案
通过先统计现有分组人数,再决定新参与者的分组:
- 若两组人数不等,将新参与者分配至人数较少的组
- 若两组人数相等,随机分配0或1
代码实现
初始化数据框
# 初始化包含第一个参与者的分组数据框 groupData <- data.frame(participant = c(1), Group = sample(c(0,1), 1))
编写新增参与者的函数
add_participant <- function(df, new_id) { # 统计现有两组的人数 count_0 <- sum(df$Group == 0) count_1 <- sum(df$Group == 1) # 确定新分组 new_group <- if (count_0 < count_1) { 0 } else if (count_1 < count_0) { 1 } else { sample(c(0,1), 1) } # 合并新行到原数据框 rbind(df, data.frame(participant = new_id, Group = new_group)) }
使用示例
# 添加参与者2 groupData <- add_participant(groupData, 2) # 添加参与者3 groupData <- add_participant(groupData, 3) # 继续添加更多参与者 groupData <- add_participant(groupData, 4) groupData <- add_participant(groupData, 5) # 查看最终分组结果 print(groupData)
效果说明
每次新增参与者时,函数会自动平衡两组人数,确保两组人数差始终不超过1;当人数相等时仍保留随机分配的特性,符合随机分组的核心要求。
内容的提问来源于stack exchange,提问作者Lea Maria Endres
相关产品推荐
相关产品推荐

