R根据条件生成随机数

时间:2019-01-31 12:36:51

标签: r vector random

我想根据以下条件生成100个数字的序列-

  • 数字范围是1到5,是整数。
  • 生成的1s和2s占总数的百分比等于90%

我的尝试

我尝试使用runif创建序列。但是我不确定如何包括第二个条件。

v=c(1,2,3,4,5)
rep(sample(v),100)

第二种情况对您的帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

如@markus所示,您可以为此使用prob参数。这是另一个想法

v <- sample(c(sample(1:2, 90, replace = TRUE), sample(3:5, 10, replace = TRUE)))

首先分别生成由1,2组成的90%(即90个元素)和其余10%(即10),然后对结果进行混洗。

显然,

length(which(v %in% 1:2)) / length(v)
# [1] 0.9

修改

这里是更普遍的情况

# size of final vector
n <- 100
# percentages
p1 <- 0.935
p2 <- 1 - p1
# calculate number of elements (using round)
n1 <- round(p1*n)
n2 <- n - n1
# get final vector
v <- sample(c(sample(1:2, n1, replace = TRUE), sample(3:5, n2, replace = TRUE)))

# Note:
length(which(v %in% 1:2)) / length(v)
# [1] 0.94

请注意,例如,可以通过设置n <- 100*10来获得确切的百分比。