代码之家  ›  专栏  ›  技术社区  ›  Varun

r根据条件生成随机数

  •  1
  • Varun  · 技术社区  · 7 年前

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

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

    我的尝试

    我试图用 runif . 但是我不确定如何包括第二个条件。

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

    如果您能在第二种情况下给予帮助,我们将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  2
  •   niko    7 年前

    如@markus所示,您可以使用 prob 对此的论证。这是另一个主意

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

    首先生成90%(即这里的90个元素),包括 1,2 然后将剩下的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 .

    推荐文章