生成一个介于0和1之间,具有特定长度和特定数量1的向量

时间:2018-12-13 03:33:04

标签: r random

我需要创建一个长度为4的向量,以使元素中的2个为1,其他2个为0,并且在某个位置出现的数字是随机的。

例如,第一个模拟为[1,1,0,0]。第二个模拟可能是[1、0、1、0]或其他。

我尝试了如下代码:

 sample(x = c(0,1), size = 4, replace = TRUE, prob = 0.5)

但是它只是返回一个随机数为1和0的列表。

是否可以在不使用for或while循环的情况下建立这样的列表?

1 个答案:

答案 0 :(得分:3)

您可以为prob参数提供两个值,但这不能保证分布相等。

sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 1 0 0 1
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 1 1 0 1
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 0 0 0 1

您可以做的是使用rep创建向量,然后使用sample进行随机性

sample(rep(c(1, 0), 2))
#[1] 0 1 0 1

sample(rep(c(1, 0), 2))
#[1] 0 0 1 1

sample(rep(c(1, 0), 2))
#[1] 1 1 0 0

sample(rep(c(1, 0), 2))
#[1] 0 1 1 0

如果您有不同的向量长度,这也可以使用,因为我们可以使用times参数

n <- 11

sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 0 1 0 1 1 0 0 0 0 0
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 1 0 0 0 0 1 0 0 0 1
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 1 0 0 0 0 1 0 0 0 1