2016-07-05 12 views
2

行列をランダム化して、各列の各行を個別にランダム化して、最終行列に列間の関連付けがないようにしようとしています。私はsample()機能と何らかの種類のfor(each column)ループを使用する必要があることを知っていますが、それをやり遂げる方法については必ずしも分かりません。具体的には、行列の列をループし、各列の行をランダム化する関数を書く方法を尋ねています。R - 行列の各行を別々にランダム化する

編集:私は達成しようとしているものの例

オリジナル行列:

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

サンプル所望の出力:

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

あなたが見ることができるように、それぞれの行別々にランダム化されています。

+0

私は見てみると思います[、最小完全、かつ検証例を作成する方法](http://stackoverflow.com/help/mcve)およびshowあなたの希望する出力 - あなたはより良い応答を得る可能性が高いでしょう。 – Tchotchke

+0

チップをありがとう!私は達成しようとしていることを明確にしようとし、例を追加しました。 – czhu550

答えて

1

あなたは行列Xを持っている場合は、あなたがapply()(行列のための理想的な)

apply(X, 2, sample) 

を使用することができます。例:

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 

は、上記のコードを適用できます:

#  [,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 

ランダムに設定していませんset.seed()経由でeedしますので、実行すると異なる結果になります。しかし、あなたが知る必要があるのは、結果はランダムです。あなたは、データフレームXを持っている場合は

、あなたはより良いあなたは、各列のforループを使用することができsapply()

sapply(X, sample) 
0

を使用すると思います。

それとも、使用できます。

apply(x, 2, function(col) sample(col, replace=F)) 
関連する問題