【问题标题】:How to generate random numbers from defined ranges in R [closed]如何从R中定义的范围生成随机数[关闭]
【发布时间】:2016-10-31 20:25:51
【问题描述】:

我想在 R 中生成随机数。假设我有一些范围:

20  3293601
3295601 3653454
3655454 3877785
3879785 4454406
4456406 4772139
4774139 4948406
4950406 5188645
5190645 5641009
5643009 5731188
5733188 5993268...

当然,我可以首先通过seq(start, end) 生成此范围的序列,并将所有这些序列附加在一起。然后我可以使用sample(sequences, n) 来生成随机数。但问题是我有很多这样的范围,比如说我有一千个范围,所以生成所有这些序列并不是很可行。有没有更快的方法在 R 中生成这些范围内的随机数?

【问题讨论】:

    标签: r random


    【解决方案1】:

    假设您想在您发布的每行数据的间隔之间生成随机数,其中第一列代表下限,第二列代表上限,这样的事情会起作用。

    ranges <- matrix(c(20,3293601,
                      3295601,3653454,
                      3655454,3877785,
                      3879785,4454406,
                      4456406,4772139,
                      4774139,4948406,
                      4950406,5188645,
                      5190645,5641009,
                      5643009,5731188), 
                ncol = 2, 
                byrow = TRUE)
    
    mapply(runif, 100, ranges[ ,1], ranges[ ,2])
    

    这将在每个范围之间产生 100 次平局。您可以将 100 更改为您想要的任意数量的平局。

    编辑

    根据您的评论,我仍然很困惑,但我会尝试。从您的示例中,听起来您想要sample(c(1:10, 20:30), 10) 的结果,现在您想知道当您有更多间隔时如何做到这一点。那是对的吗?看看下面是不是你想要的。

    seqs <- unlist(mapply(seq, ranges[ ,1], ranges[ ,2]))
    sample(seqs, 10)
    

    【讨论】:

    • 感谢您的回答,但这并不是我想要的。如果我有两个区间 [1,10] 和 [20, 50],我怎样才能得到 6 个均匀分布在 [1, 10] U [20, 50] 中的随机数,我写“U”表示联合?也就是说,例如,我们可能有 3 个来自 [1, 10] 的数字和 6 个来自 [20, 50] 的数字。
    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2014-08-28
    • 2014-01-29
    • 2017-10-07
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多