r - 创建一个没有元素与原始向量位于相同位置的新向量?

标签 r

假设我有一个向量 V1 (具有两个或更多元素):

V1 <- 1:10

我可以使用函数 sample 重新排序原始向量.但是,此函数无法确保新向量中的任何元素都不会与原始向量位于同一位置。例如:
set.seed(4)
V2 <- sample(V1)

这将导致具有两个元素与原始元素位于相同位置的向量:
V1[V1 == V2]

3 5

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

最佳答案

您要求向量中没有某些索引无法移动意味着您不想要可能发生的纯随机排列。我能想到的最好的方法就是循环,使用 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

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

关于r - 创建一个没有元素与原始向量位于相同位置的新向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606467/

相关文章:

r - 矢量化 R 函数

r - dplyr 无效的下标类型列表

r - 在 tidygraph 中过滤

r - 将 abline 添加到图例

r - R's lubridate 中的独家时间间隔

r - 在 R 中设置行长度

r - 当特征值非常小时,无法得到正定协方差矩阵

r - 如何从 POSIXct 元素中提取正确的日期?

R 多个数据框列匹配以填充列

r - alpha、beta、开发和修补版本(例如 R)之间的差异?