我有这个问题,我无法弄清楚。我有 500 个来自均匀分布的 A 组样本。 B 组有 500 个来自另一个均匀分布的样本。
我将从 A 中选择一个值 a,并从 B 中选择另一个值 b。 我想让“a 总是小于 b”。我想要 500 双,不重复。
A <- runif(500, min = 19, max= 23)
B <- runif(500, min = 22, max= 26)
如何获得 500 对 (a,b),其中 a < b,且不重复?
<小时/>编辑:
抱歉,我需要澄清我的问题。 A组和B组一旦设定,就不会改变。应从固定的 A 和 B 中选择 500 对。在每对中,a < b。
我想看到像蒙特卡罗那样的“随机”效果。所以,我认为仅仅排序并不能解决这个问题。
最佳答案
由于 A 和 B 的范围不同,我们可以对集合进行排序,并检查排序后的向量是否产生满足所需条件的对。
C <- sort(A)
D <- sort(B)
现在我们需要检查 C[i]
是否对, D[i]
满足条件C[i] < D[i]
对于所有人i
:
> !!sum(C > D)
#[1] FALSE
在这种情况下,我们很幸运:所有对都满足必要条件。如果此测试返回 TRUE
,我们可以尝试生成新的随机数集。
现在我们有对 C[i]
, D[i]
条目选自A
和B
,分别使得 C[i] < D[i]
对于 i
的所有 500 个值。
float 中的重复实际上是不可能的。
关于r - 满足条件的样本对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509949/