创建一个新矢量,而没有元素与原始矢量位于同一位置?

时间:2018-10-02 10:22:45

标签: r

假设我有一个向量for(int i = 0; i < 6; i++) { boolean selected = false; while(!selected){ selected = true; int numbers = random.nextInt(48) + 1; for(int k = 0; k <= i; k++) { if (table[k] == numbers) { selected = false; break; } } if(selected){ table[i] = numbers; } } } (包含两个或多个元素):

V1

我可以使用函数V1 <- 1:10 对原始向量进行重新排序。但是,此功能不能确保新向量中的任何元素都与原始向量不在同一位置。例如:

sample

这将导致一个向量,其中两个元素与原始元素的位置相同:

set.seed(4)
V2 <- sample(V1)

我的问题是:是否可以生成随机向量以确保两个向量之间没有元素位于相同位置?

1 个答案:

答案 0 :(得分:2)

您对向量中没有某些索引的要求是不能移位的,这意味着您不希望出现纯随机排列的情况。我能想到的最好的方法是使用sample循环,直到找到每个元素都在移动的向量:

v1 <- 1:10
v1_perm <- v1
cnt <- 0

while (sum(v1 == v1_perm) > 0) {
    v1_perm <- sample(v1)
    cnt <- cnt + 1
}

v1
v1_perm
paste0("It took ", cnt, " tries to find a suitable vector")

[1]  1  2  3  4  5  6  7  8  9 10
[1]  3 10  4  7  8  1  6  2  5  9
[1] "It took 3 tries to find a suitable vector"

Demo

请注意,我已经实现了用移位值移位位置的要求。当然,这并不是严格意义上的,因为两个值可能相同。但是,假设所有条目都是唯一的,则检查值的零重叠等于索引的零重叠。