我对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
有一个简单的方法吗?
借用之前的答案,一种方法是暴力破解并不断采样,直到获得具有所需特征的排列。
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)