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

时间:2018-03-08 16:02:37

标签: r random unique sample

我有一个问题(也许这并不困难,但我无法弄明白:

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

我希望有人有解决方案......谢谢

3 个答案:

答案 0 :(得分:2)

如果你想将安德鲁的方法作为一种功能

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

答案 1 :(得分:1)

另一种方法......

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

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

答案 2 :(得分:0)

你可以这样做......

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...