【问题标题】:sample list randomly and remove used values随机抽样列表并删除使用的值
【发布时间】:2018-03-08 16:02:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: r random unique sample


    【解决方案1】:

    如果你想要 Andrew 的方法作为一个函数

    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
    

    【讨论】:

    • 谢谢!但是我的问题发生了变化,因此该功能不再起作用。我不必随机分配列表而是变量(133 分为 3 组)。你能帮我解决这个问题吗?
    • 这实际上也适用于数据框(因为数据框是列表)。使用 ceil(ncol(df)/3) 作为第二个参数。
    【解决方案2】:

    另一种方法...

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

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

    【讨论】:

    • 由于长度和清晰度,这是一个低质量的答案。请详细说明。
    • 同意@zfrisch。为了清楚起见,我已经注释了。
    【解决方案3】:

    你可以做这样的事情......

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2020-12-07
      相关资源
      最近更新 更多