Cómo aleatorizar un vector


81

Me gustaría reorganizar aleatoriamente el orden de los números en un vector, en un simple comando de una línea.

Mi vector particular V tiene 150 entradas para cada valor de 1 a 10:

V <- rep(1:10, each=150)

9
Las respuestas aquí apuntan correctamente hacia usted sample. Es posible que desee consultar las advertencias aquí para ver algunos peligros que acompañan al uso de la muestra tal como está.
Dason

@Dason: el tl; dr es siempre que se garantice que la longitud del vector sea> 1, funciona.
smci

1
@smci El tl; Dr es que es peligroso porque uno se siente cómodo con él y luego cuando finalmente es de longitud 1 te muerde.
Dason

@Dason Había leído eso, pero nadie ha modificado aún base::samplepara forzar su uso seq_along. Además, no veo dónde sample/sample.intllamar de base::seq()todos modos.
smci

Respuestas:


124

Si.

sample(V)

De ?sample:

Para 'muestra', el valor predeterminado para 'tamaño' es el número de elementos inferidos del primer argumento, de modo que 'muestra (x)' genera una permutación aleatoria de los elementos de 'x' (o '1: x').


¿Cómo puedo mezclar [1,1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5] de modo que obtengo algo como esto: [5, 5, 3, 3, 3, 3, 1, 1, 2, 4, 4, 4]? tal que cada elemento podría cambiar aleatoriamente a otro pero manteniendo constante el número de cada elemento?
Rotail

2
@Rotail: esto ya hace lo que quieres; el sizeargumento de los samplevalores predeterminados size <- length(x). (Escriba samplepara ver el código que hace esto.)
smci

¡Sip! ¡Gracias!
Rotail

24

sampleFunción de uso

V<-rep(1:10, each=150)

set.seed(001) # just to make it reproducible
sample(V)

1
replace=FALSEes el valor predeterminado.
Ben Bolker

esto hace 150 valores del original 1500
user1723765
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.