随机集生成(带有一些参数约束)

时间:2017-01-15 04:08:36

标签: r statistics probability

我有8个读者可以获得n个奖学金申请。每个应用程序将被读取两次。但是,相同的应用程序不能被同一个读取器读取多次。鉴于上述约束,我想将应用程序分配给每个阅读器。我怎么能在R?中做到这一点?

示例:16个应用程序,8个阅读器 读者1:1,4,5,16 读者2:1,6,10,11 读者3:4,10,15,9 等等,直到读者8:

1 个答案:

答案 0 :(得分:1)

如果要将由1到68的每个数字两个副本组成的矢量分区为8个相等大小(随机)的集合,请尝试类似

的内容
split(sample(rep(1:68,2),rep(1:8,each=(2*68)/8))

此解决方案不遵守每个子集不应包含重复项的附加约束,即每个子集中每个值应出现不超过一次,并且整个数据集恰好两次。

以下函数失败,因为最后一步可能根本没有选择某些值,这意味着最后一个样本将违反约束。

sampfun <- function(ngrp=8,ntot=68,mult=2) {
   n <- mult*ntot/ngrp 
   res <- list()
   all_chosen <- rep(FALSE,ntot)
   for (i in 1:ngrp) {
     res[[i]] <- sample(s[!all_chosen],size=n,replace=FALSE)
     all_chosen <- table(factor(unlist(res),levels=1:ntot))==mult
   }
   return(res)
}

你的样本真的需要随机吗?您可以split(rep(1:ntot,mult),rep(1:ngrp,each=ntot*mult/ngrp))分隔读者之间的文章,对吗?