【发布时间】:2016-03-15 04:40:58
【问题描述】:
我相信 R 中应该有这个功能。但是,我找不到它。我需要的是根据给定的概率获取向量。我认为sample 可以做到这一点,但这不是我真正想要的。
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(1, 2, 3, 4) 中每个向量的0.25。因此,如果size = 8 则其中的 0.25 为 2,这应该是 c(1, 2, 3, 4) 中每个元素的长度。 R 中是否已经为此提供了一个函数,或者我必须编写一个自定义函数?
【问题讨论】:
-
我想你不想要
c(sample(4), sample(4))?或c(replicate(2,sample(4)))? -
sample(rep(1:4, 2))- 你可以进一步概括它,但基本上你想要做的是创建一个具有所需重复次数的向量,然后使用样本对其进行置换。 -
@jogo 我相信您的代码仅适用于相同数量的概率值。 (这里是 0.25)。如果我的概率为
c(0.2, 0.4, 0.2, 0.2)怎么办? -
是的,您的示例(直到现在)也仅适用于等概率。但是有eipi10的解决方案和Dason的评论,你可以使用或者(在Dasons评论的情况下)详述。