获得均匀分布的样本但保持顺序
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)
谢谢!
使用以下解决方案,您无需比较原始向量的元素来对它们进行排序;您唯一要做的就是洗牌逻辑值向量(TRUE
或 FALSE
)。
假设您要从 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
现在输出样本值的顺序与它们在原始向量中的顺序相同。
我怎样才能获得一个向量值的样本,同时保持顺序而不使值本身相互比较?
例如:
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)
谢谢!
使用以下解决方案,您无需比较原始向量的元素来对它们进行排序;您唯一要做的就是洗牌逻辑值向量(TRUE
或 FALSE
)。
假设您要从 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
现在输出样本值的顺序与它们在原始向量中的顺序相同。