2016-07-05 41 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 

我沒有設置隨機s通過set.seed()來獲得,所以當你運行它時你會得到不同的結果。但是你需要知道的是:結果是隨機的。

如果你有一個數據幀X,你最好使用sapply()

sapply(X, sample) 
0

你可以使用一個for循環爲每列。

或者你可以使用:

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