生成一个具有特定数量负数的随机向量

我正在做一个失败分析,我喜欢尝试一些不同的场景和一些随机试验。 到目前为止,我已经通过镶嵌套件完成了这项工作,并且工作效果很好。 在一个特定的场景中,我想用不同的分布生成一个(半)随机数的向量。 到目前为止没有问题。

现在我想定义此向量中负数的数量。 例如,我想在25个数字的向量中有0-5个负数。 我以为我可以使用像rbinom(n=25,prob=5/25,size=1)来获得5个随机数,但当然是rbinom(n=25,prob=5/25,size=1) 25,25次可以超过5个。 这似乎是死路一条。 我可以用一些for循环来完成它,但可能更容易一些。 我已经尝试过各种样本,seq,shuffle组合,但是到目前为止我无法实现它。

有没有人有任何想法或建议?


如果你有一个向量x,其中所有元素> = 0,我们可以说从泊松得出:

x = rpois(25, lambda=3)

你可以做一个随机5的负数

x * sample(rep(c(1, -1), c(length(x) - 5, 5)))

这是因为

rep(c(1, -1), c(length(x) - 5, 5))

将会

#  [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 -1 -1 -1 -1 -1

sample(rep(c(1, -1), c(length(x) - 5, 5)))随机地将它们洗牌:

sample(rep(c(1, -1), c(length(x) - 5, 5)))
#  [1]  1  1 -1  1  1  1  1  1  1  1  1 -1  1  1  1 -1 -1  1  1  1 -1  1  1  1  1

我可以建议一个非常简单的解决方案,保证5个负值,并为任何连续分配工作。 这个想法只是对矢量进行排序,并将每个值减去第六大:

x <- rnorm(25)
res <- sort(x, T)[6] - x
#### [1]  0.4956991  1.5799885  2.4207497  1.1639569  0.2161187  0.2443917 -0.4942884 -0.2627706  1.5188197
#### [10]  0.0000000  1.6081025  1.4922573  1.4828059  0.3320079  0.3552913 -0.6435770 -0.3106201  1.5074491
#### [19]  0.6042724  0.3707655 -0.2624150  1.1671077  2.4679686  1.0024573  0.2453597
sum(res<0)
#### [1] 5

它也适用于离散分布,但只适用于没有关系的情况。

链接地址: http://www.djcxy.com/p/24869.html

上一篇: generate a random vector with specific number of negative numbers

下一篇: How do you create vectors with specific intervals in R?