【发布时间】:2023-04-02 02:06:01
【问题描述】:
我正在为我正在指导的大学班级(约 180 名学生)创建一个小组作业。重要的是,这些群体在三个变量(学习领域 (FOS)、性别、部门:即新老学生)中尽可能地异质化。
FOS 有 5 个级别,性别有 2 个,部门有 2 个。鉴于该项目,我想创建大约 8-9 个组。换句话说,我想要大约 6 人的小组,在不同的学习领域、男性/女性以及新老学生之间取得“良好”的平衡。然后,我只需将名称与自动分配一起发布。
之前的导师都是手工完成的,但我尝试过使用 R 来查看是否有更系统的方法来执行此操作,但只是想出了重复(且笨拙)的排序。我预计 5 个 FOS 级别的大小会有所不同,因此我认识到这不是一个完美的解决方案。对人们的聪明解决方案感兴趣。这是一个可重复的样本:
dat <- data.frame(
student = 1:180,
gender = factor(sample(LETTERS[1:2], 180, replace = T, prob = c(.52,.48)),
labels=c("female","male")),
division = factor(sample(LETTERS[1:2], 180, replace = T, prob = c(.6,.4)),
labels=c("lower","upper")),
field = factor(sample(LETTERS[1:5], 180, replace = T,
prob = c(.26,.21,.35,.07,.11)),
labels = c("humanities","natural science",
"social science","engineer","other")))
这是我一直在玩的,但它确实增加了分配的随机性,而不是可以看出的平衡:
library(dplyr)
dat$rand <- sample(1:180,180)
dat1 <- arrange(dat, field, division, gender, rand)
dat1$grp <- 1:(nrow(dat1)/6) #issue if not divisible
这不会导致足够的平衡:
with(dat1, table(gender, grp)) #as a check
with(dat1, table(field, grp))
with(dat1, table(division, grp))
【问题讨论】:
标签: r