So randomisieren Sie einen Vektor


79

Ich möchte die Reihenfolge der Zahlen in einem Vektor in einem einfachen einzeiligen Befehl zufällig neu organisieren.

Mein spezieller Vektor V hat 150 Einträge für jeden Wert von 1 bis 10:

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

9
Die Antworten hier weisen zu Recht auf Sie hin sample. Vielleicht möchten Sie die Warnungen hier auf einige Gefahren überprüfen, die mit der Verwendung der Probe unverändert einhergehen.
Dason

@Dason: Das tl; dr ist so lange, wie die Vektorlänge garantiert> 1 ist, es funktioniert.
smci

1
@smci Das tl; Dr ist, dass es gefährlich ist, weil man sich damit vertraut macht und wenn es dann endlich die Länge 1 hat, beißt es dich.
Dason

@Dason Ich hatte das gelesen, aber noch niemand wurde modifiziert base::sample, um die Verwendung von zu erzwingen seq_along. Auch ich sehe sowieso nicht wo sample/sample.intanrufen base::seq()?
smci

Antworten:


123

Ja.

sample(V)

Von ?sample:

Für 'sample' ist die Standardeinstellung für 'size' die Anzahl der Elemente, die aus dem ersten Argument abgeleitet wurden, sodass 'sample (x)' eine zufällige Permutation der Elemente von 'x' (oder '1: x') generiert.


Wie kann ich [1,1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5] so mischen, dass ich so etwas bekomme: [5, 5, 3, 3, 3, 3, 3, 1, 1, 2, 4, 4, 4]? so dass jedes Element zufällig zu einem anderen wechseln könnte, aber die Anzahl der einzelnen Elemente konstant bleibt?
Rotail

2
@ Rotail: das macht schon was du willst; das sizeArgument der sampleStandardeinstellungen ist size <- length(x). ( sample
Geben Sie ein

Jep! Vielen Dank!
Rotail

24

Verwenden Sie sampleFunktion

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

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

1
replace=FALSEist der Standardwert.
Ben Bolker

Dies ergibt 150 Werte aus dem ursprünglichen 1500
user1723765
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.