获得均匀分布的样本但保持顺序

Get an uniform distributed sample but keep the order

我怎样才能获得一个向量值的样本,同时保持顺序而不使值本身相互比较?

例如:

V1 contains values (1,2,3,4,5,6,7,8,9,10,11,12,13,14)

我想要样品

sample <- (2,7,10,14)

如您所见,值仍在排序中,但随机选择。

但是如果我在 R 中使用函数 sample 或 rdunif,我会得到随机排序的选择:

ie. (7,10,2,14)

谢谢!

使用以下解决方案,您无需比较原始向量的元素来对它们进行排序;您唯一要做的就是洗牌逻辑值向量(TRUEFALSE)。

假设您要从 already-ordered 向量 v 中选取 n 个元素并保持它们的顺序。那么你可以做

v <- 1:14
n <- 4

set.seed(42)   # for reproducibility
logi <- sample(c(rep(TRUE, n), rep(FALSE, length(v) - n)))
v[logi]
# [1]  1  6  7 14

编辑证明向量v可以是任何向量,我们仍然设法保持其原始顺序。

set.seed(1)
n <- 4
v <- sample(14, replace = FALSE)
v
# [1]  9  4  7  1  2 12  3  6 10  8  5 11 13 14

set.seed(42)   # for reproducibility
logi <- sample(c(rep(TRUE, n), rep(FALSE, length(v) - n)))
v[logi]
# [1]  9 12  3 14

这些数字确实尊重向量的原始顺序 v

V1 <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
sample_V1 <- sample(V1, 4)
sort(sample_V1)

看看在原来的V1不按数字顺序的情况下能不能这样

set.seed(42)
 v <- sample(1:14,14,rep=FALSE)
 #  [1]  1  5 14  9 10  4  2  8 12 11  6 13  7  3
 n <- 4
 foo <- sample(v,length(v)-n,rep=FALSE)
 match(foo,v)
 v[-match(foo,v)]
 # [1]  1 13  7  3

现在输出样本值的顺序与它们在原始向量中的顺序相同。