随机样本列表并删除使用的值

sample list randomly and remove used values

我有一个问题(也许不是那么难,但我想不通:

我有一个 25 的列表 (l),我想将该列表随机分成 5 组。我遇到的问题是,如果我使用 sample(l, 5) 并且这 5 次它不会给我独特的样本。所以基本上,我正在寻找的是选择 5 然后从列表中删除它们然后再次采样。

希望有人有解决办法...谢谢

你可以这样做...

l <- as.list(LETTERS[1:25])

l2 <- split(l,rep(1:5,5)[sample(25)])

l2 #is then a list of five lists containing all elements of l...
$`1`
$`1`[[1]]
[1] "D"

$`1`[[2]]
[1] "I"

$`1`[[3]]
[1] "M"

$`1`[[4]]
[1] "W"

$`1`[[5]]
[1] "Y"


$`2`
$`2`[[1]]
[1] "C"

$`2`[[2]]
[1] "E"

$`2`[[3]]
[1] "H"

$`2`[[4]]
[1] "T"

$`2`[[5]]
[1] "X"
 etc...

如果你想将安德鲁的方法作为一个函数

sample2 <- function(x, sample.size){
 split(x, sample(ceiling(seq_along(x)/sample.size)))
}

sample2(1:20, 5)

给予

$`1`
[1]  1 15  6  3 18

$`2`
[1] 11  7  5 10 14

$`3`
[1]  2 12  4 13 17

$`4`
[1] 19 16 20  8  9

另一种方法...

x <- 1:20
matrix(x[sample(seq_along(x),length(x))],ncol = 4)

在这里,我们通过对索引值进行采样来随机重新排序您的向量,然后将结果转储到一个矩阵中,使其列代表您的五个组。您也可以将其保留为向量,或者如果您不希望输出为矩阵,则可以列出一个列表。