【问题标题】:How do I select a sample of rows at random with repetition from a matrix in R?如何从R中的矩阵中随机选择一个重复的行样本?
【发布时间】:2011-12-10 00:56:28
【问题描述】:

如何从 R 中的矩阵中随机选择重复的行样本?

所以请明确一点,我将从一个矩阵开始,例如 100 行,然后我可以选择其中的 5 行并创建一个新矩阵。我希望可以选择更换或不更换。

【问题讨论】:

    标签: r random


    【解决方案1】:

    在带有replace=TRUEreplace=FALSE 的行上使用sample

    如果X 是您的原始矩阵,那么

    X[sample(nrow(X),size=5,replace=TRUE),]
    

    X[sample(nrow(X),size=5,replace=FALSE),]
    

    应该可以。 (如果您先选择示例:s <- sample(...),然后选择子集:newmat <- X[s,],则可能更具可读性)

    【讨论】:

      【解决方案2】:

      使用sample函数:

      x <- matrix(1:1000, nrow=100)
      

      有替换:

      x[sample(1:100, 5, replace=TRUE), ]
           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
      [1,]   19  119  219  319  419  519  619  719  819   919
      [2,]   51  151  251  351  451  551  651  751  851   951
      [3,]   42  142  242  342  442  542  642  742  842   942
      [4,]   48  148  248  348  448  548  648  748  848   948
      [5,]   73  173  273  373  473  573  673  773  873   973
      

      无需更换:

      x[sample(1:100, 5, replace=FALSE), ]
           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
      [1,]   64  164  264  364  464  564  664  764  864   964
      [2,]   67  167  267  367  467  567  667  767  867   967
      [3,]   20  120  220  320  420  520  620  720  820   920
      [4,]   17  117  217  317  417  517  617  717  817   917
      [5,]    6  106  206  306  406  506  606  706  806   906
      

      【讨论】:

        【解决方案3】:

        这似乎更适用于数据框:

        sample_df<-x[sample.int(nrow(x),size=100,replace=TRUE),]
        

        【讨论】:

          最近更新 更多