【发布时间】:2017-03-16 00:25:42
【问题描述】:
我想从带有替换的向量中随机抽取 5 个数字:
myvector <- c(1:50)
draws <- sample(myvector,5,replace=F)
但是,要包括一些限制。
排除1:我不想同时画10和11
排除 2:我只想拥有以下 一个:17、18、19、20。
但是在算法开始之前,每个数字都应该有相同的概率被抽中。到目前为止,我的想法违反了这个条件:为排除项分配相同的数字并从中得出:
myvector.wrong <- c(1:9,10,12:17,21:50)
draws.wrong <- sample(myvector.wrong,5,replace=F)
#say we draw a 17:
draws.wrong[1] <- 17
#then replace the 17 with a randomly drawn number from c(17:20)
draws.wrong[draws.wrong==17] <- sample(c(17:20),1)
但是,这意味着与没有限制的数字相比,c(17:20) 中的每个数字现在只有四分之一的机会被抽中。我只希望一旦以与任何其他相同的机会抽取了一个排除项,该机会就会减少(至 0)。我可以将 17 包括四次,但我冒着绘制两次的风险,这正是我想要避免的。
迭代地,这会更容易:在每次抽奖后检查是否抽出了任何排除号码(例如 10),并在再次抽奖之前删除相应的排除号码(10 和 11)。但是,我会执行很多(通常是 50k,有时是 500k)重复这个过程,所以效率是个问题。
有接受者吗?
【问题讨论】:
标签: r