2016-07-05 18 views
2

Ich versuche, eine Matrix randomisieren, so dass jede der Zeilen in jeder Spalte einzeln randomisiert sind, so dass in der endgültigen Matrix gibt es keine Zuordnung zwischen Spalten. Ich weiß, dass ich die sample() Funktion und eine Art von for(each column) Schleife verwenden muss, aber ich bin nicht genau sicher, wie man es macht. Insbesondere frage ich, wie man eine Funktion schreibt, die die Spalten einer Matrix durchläuft und die Zeilen jeder Spalte zufallsverteilt.R - Randomize jede Zeile in einer Matrix separat

Edit: Ein Beispiel dafür, was ich versuche

Original-Matrix zu erreichen:

 X1 X2 X3 
    1 4 3 6 
    2 7 2 4 
    3 9 5 1 

Probe gewünschte Ausgabe:

 X1 X2 X3 
    1 7 3 1 
    2 4 5 6 
    3 9 2 4 

Wie Sie sehen können, werden die Zeilen in jeder Spalte wurde separat randomisiert.

+0

ich auf einen Blick würde [Wie ein Minimal, Complete, und prüfbare Beispiel erstellen] (http://stackoverflow.com/help/mcve) und Show Ihre gewünschte Ausgabe - Sie werden viel eher eine gute Antwort bekommen. – Tchotchke

+0

Danke für den Tipp! Ich habe versucht zu erklären, was ich erreichen möchte und habe ein Beispiel hinzugefügt. – czhu550

Antwort

1

Wenn Sie eine Matrix X haben, können Sie apply() (ideal für Matrix) verwenden

apply(X, 2, sample) 

Beispiel:

X <- matrix(1:25, 5) 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 1 6 11 16 21 
# [2,] 2 7 12 17 22 
# [3,] 3 8 13 18 23 
# [4,] 4 9 14 19 24 
# [5,] 5 10 15 20 25 

Übernehmen Sie den obigen Code gibt:

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 3 10 11 16 21 
# [2,] 5 8 12 20 22 
# [3,] 4 9 14 18 24 
# [4,] 2 6 15 19 25 
# [5,] 1 7 13 17 23 

Ich habe keine zufälligen s gesetzt eed über set.seed(), so erhalten Sie unterschiedliche Ergebnisse, wenn Sie es ausführen. Aber alles was du wissen musst ist: Das Ergebnis ist zufällig.

Wenn Sie einen Datenrahmen X haben, sollten Sie besser sapply()

sapply(X, sample) 
0

verwenden Sie eine for-Schleife für jede Spalte verwenden könnte.

Oder könnten Sie:

apply(x, 2, function(col) sample(col, replace=F)) 
Verwandte Themen