样本向量完全根据给定的概率

我相信在R中应该有这个功能.但是,我无法找到它.我需要的是根据给定的概率得到向量.我认为样本可以做到这一点,但它不是我想要的.

sample(c(1, 2, 3, 4), size = 4, prob=c(0.25, 0.25, 0.25, 0.25)) 

# [1] 1 3 4 2

哪个是对的.

然后我试试

sample(c(1, 2, 3, 4), size = 8, replace = T, prob=c(0.25, 0.25, 0.25, 0.25)) 

# [1] 1 4 4 3 2 3 1 3

我真正需要的是类似的东西

#[1] 1 4 4 2 2 3 1 3

要么

#[1] 2 3 1 1 4 4 2 3

或类似的东西,其中给定的向量完全根据给定的概率划分.因此,在给定的示例中,输出向量应包含c中的每个向量的0.25(1,2,3,4).因此,如果size = 8,那么它的0.25是2,它应该是c(1,2,3,4)中每个元素的长度. R中是否已经有一个功能,或者我必须编写自定义功能?

最佳答案 由于您希望每个值的重复次数是确定性的而不是随机的,因此使用rep(而不是sample)来重复每个值与prob概率的比例.然后,您可以创建结果向量的随机排列.

x = c(1,2,3,4)

prob = c(0.1,0.2,0.3,0.4)

# Total sample size
n = 20

result = rep(x, round(n * prob))

[1] 1 1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 4 4

然后创建100个随机排列:

replicate(100, sample(result))
点赞