web-dev-qa-db-fra.com

Comment sélectionner un échantillon de lignes au hasard avec répétition à partir d'une matrice dans R?

Comment sélectionner un échantillon de lignes au hasard avec répétition à partir d'une matrice dans R?

Soyons clairs, je commencerais par une matrice de 100 lignes, par exemple, et je serais en mesure de sélectionner 5 de ces lignes et de créer une nouvelle matrice. Je voudrais l'option de le faire avec ou sans remplacement.

19
Henry B.

Utilisez sample sur les lignes avec replace=TRUE ou replace=FALSE.

Si X est votre matrice d'origine, alors

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

ou

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

devrait marcher. (Cela peut être plus lisible si vous choisissez d'abord l'exemple: s <- sample(...) puis un sous-ensemble: newmat <- X[s,])

35
Ben Bolker

utilisez la fonction sample:

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

Avec remplacement:

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

Sans remplacement:

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
9
Andrie

Cela semble mieux fonctionner avec les trames de données:

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