在没有连续相同数字的r中进行采样

icn*_*aap 8 r

我对R很新,但我已经做了很多搜索,但没有找到我的问题的答案.

我有一个8位重复的向量:

allNum <- c(rep(1, 70), rep(2, 70), rep(3, 35), rep(4, 35), 
            rep(5, 70), rep(6, 70), rep(7, 35), rep(8, 35))
Run Code Online (Sandbox Code Playgroud)

现在我想对此进行排列(大概使用sample(allNum, 420, replace=FALSE)),但我不想要任何连续的相同数字 - 例如:1 2 2 8

有一个简单的方法吗?

Blu*_*ter 0

借用之前的答案,一种方法是暴力破解并不断采样,直到获得具有所需特征的排列。

nonconsec.permute <- function(pop,size) {
  while(!exists("x",inherits=FALSE) || 0 %in% diff(x)) {
    x <- sample(pop, size, replace=F)
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,以下命令需要很长时间,因为在您提供的示例中相同的连续数字非常常见。因此,这种方法在您的具体情况下不可行。

nonconsec.permute(allNum,420)
Run Code Online (Sandbox Code Playgroud)