我在 R 中有以下向量。将它们视为数字向量。
x = c(1,2,3,4,...100)
我想根据一些输入数字“局部因子”来“局部”随机化这个向量。例如,如果局部性因子为 3,则取前 3 个元素并随机化,然后是接下来的 3 个元素,依此类推。有没有一种有效的方法来做到这一点?我知道如果我使用样本,它会弄乱整个数组。
提前致谢
最佳答案
Arun 不喜欢我的另一个答案是多么低效,所以这里有一些非常适合他的东西;)
只需调用一次 runif()
和 order()
,并且不使用 sample()
一点也不。
x <- 1:100
k <- 3
n <- length(x)
x[order(rep(seq_len(ceiling(n/k)), each=k, length.out=n) + runif(n))]
# [1] 3 1 2 6 5 4 8 9 7 11 12 10 13 14 15 18 16 17
# [19] 20 19 21 23 22 24 27 25 26 29 28 30 33 31 32 36 34 35
# [37] 37 38 39 40 41 42 43 44 45 47 48 46 51 49 50 52 54 53
# [55] 55 57 56 58 60 59 62 63 61 66 64 65 68 67 69 71 70 72
# [73] 75 74 73 76 77 78 81 80 79 84 82 83 86 85 87 89 88 90
# [91] 93 92 91 94 96 95 97 98 99 100
关于r - 在 R 中,我如何在本地打乱向量的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17640617/