R:如何在不进行替换且不具有连续相同值的情况下进行采样

问题描述 投票:9回答:3

我花了整整一天的时间来完成似乎很简单的事情。我必须创建300个“随机”序列,其中数字1,2、3和4都恰好出现12次,但是同一数字永远不会“连续”使用两次。

我最大的尝试(我想)是:

  1. 具有R个样本48个项目,没有替换项,使用rle检验是否存在连续值,然后仅使用不包含连续值的序列。问题:几乎没有符合此标准的随机序列,因此需要永远的时间。

  2. 具有R创建没有连续值的序列(请参见代码)。

  3. pop<-rep(1:4,12)
    y=c()
    while(length(y)!=48)
      {
      y= c(y,sample(pop,48-length(y),replace=F))
      y=y[!c(FALSE, diff(y) == 0)]
      }
    

问题:这将创建每个值具有不同数量的序列。然后,我尝试仅使用每个值正好为12的那些序列,但这仅使我回到问题1:花了很长时间。

必须有一些简单的方法来做到这一点,对吗?非常感谢您的帮助!

我花了整整一天的时间来完成似乎很简单的事情。我必须创建300个“随机”序列,其中数字1,2,3和4都恰好出现12次,但是相同的...

r sample
3个回答
3
投票

也许将replicate()repeat循环一起使用会更快。这里以3序列为例。看起来这大约需要花费时间。 300使用1490秒(未测试)。


1
投票

也许是一个更快的解决方案,它取出连续的值并将它们放在结尾或开头,并在不起作用时重新洗牌。


0
投票

[另一种选择是使用马尔可夫链蒙特卡罗方法随机交换2个数字,并仅在以下情况下移动到新样本:1)我们不交换相同的数字,并且2)没有2个相同的数字相邻。为了处理相关样本,我们可以生成大量样本,然后随机选择其中的300个:

© www.soinside.com 2019 - 2024. All rights reserved.