【问题标题】:Random set generation (with some parameter constraints) [closed]随机集生成(带有一些参数约束)[关闭]
【发布时间】:2017-01-15 04:08:35
【问题描述】:

我有 8 位读者来申请 n 份奖学金。每个应用程序将被准确读取两次。但是,同一个阅读器不能多次阅读同一个应用程序。鉴于上述限制,我想将应用程序分配给每个读者。我怎样才能在 R 中做到这一点?

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

【问题讨论】:

  • 我重写了这个问题。这是我第一次使用论坛。我希望我写得足够清楚。谢谢大家的帮助!

标签: r statistics probability


【解决方案1】:

如果您想将一个由 1 到 68 之间的每个数字的两个副本组成的向量划分为八个大小相等(随机)的集合,请尝试类似

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)) 把文章分给读者,对吧?

【讨论】:

  • 嗨!谢谢!让我解释一下我实际上想要做什么。我有 8 位读者,可以申请 n 份奖学金(范围)。每个读者将阅读四分之一的所有应用程序,每个应用程序将被阅读两次。但是,我希望任何两个阅读器都可以读取每个应用程序,以便阅读器按应用程序配对。那有意义吗。示例:如果有 16 个应用程序和 8 个阅读器,则将随机分配如下: reader1:1、4、5、16 reader2:1、6、10、11 reader3:4、10、15、9 等,直到 reader8 :
  • 申请不需要随机分配。应用程序只需要尽可能多地分配给不同的读者。
  • 将应用程序随机分配给每个阅读器只是为了使每个阅读器与另一个阅读器拥有最少数量的应用程序。从本质上讲,这会阻止读者之间就应用程序进行串扰。
  • 抱歉,我的问题解释得不好。我再次编辑它以防有人可以提供帮助。另外,我看到了 Ben Bolker 留下的代码。我试过'split(rep(1:ntot,mult),ngrp)'。它没有生产8套。它只是打印了一个列表,其中 1:68 打印了两次。
猜你喜欢
  • 2019-12-30
  • 2016-08-25
  • 2018-10-24
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多