2014-09-06 117 views

回答

2

你可以請在每列上調用sample函數你的矩陣來將它洗:

set.seed(100) 
apply(m1, 2, sample) 
#  [,1] [,2] [,3] 
# [1,] 1 5 8 
# [2,] 3 4 9 
# [3,] 2 6 7 
+0

我要的是重新洗牌每一列的列值,所以對於第1列我洗牌值1,4和7. – jpcgandre 2014-09-06 08:29:13

+1

@jpcgandre在你的問題中的例子,它看起來像你只是每洗牌w(也許你的意思是'rbind'而不是'cbind'作爲第二個snippit?)。你是說你想改組第1行並將它存儲在第1列中,將第2行存儲在第2列中?如果是這樣,只需從我的代碼中刪除't'。 – josliber 2014-09-06 08:34:25

+0

好的就是這樣!謝謝 – jpcgandre 2014-09-06 08:35:37

2

ehm,你的意思是在你的榜樣?

洗牌的列表:

# create a list from 1 to 9 
x <- seq(1,9) 
# shuffle 
x[order(runif(length(x)))] 

洗牌行/列的矩陣:

# example matrix 
m1 <- matrix(x,ncol=3) 
# shuffle by row 
for (i in 1:nrow(m1)) m1[i,] <- m1[i,order(runif(length(m1[i,])))] 
# shuffle by col 
for (i in 1:ncol(m1)) m1[,i] <- m1[order(runif(length(m1[i,]))),i] 

編輯:也許sample比較好... http://stat.ethz.ch/R-manual/R-devel/library/base/html/sample.html

1

你也可以把sample矩陣指數和採樣的行和列。

洗牌整個矩陣,

> m1[sample(nrow(m1)), sample(ncol(m1))] 
#  [,1] [,2] [,3] 
#[1,] 6 9 3 
#[2,] 5 8 2 
#[3,] 4 7 1 

或者按行

> m1[sample(nrow(m1)), ] 
#  [,1] [,2] [,3] 
#[1,] 3 6 9 
#[2,] 1 4 7 
#[3,] 2 5 8 

或者通過柱

> m1[,sample(ncol(m1))] 
#  [,1] [,2] [,3] 
#[1,] 7 4 1 
#[2,] 8 5 2 
#[3,] 9 6 3 
+0

'm1 [sample(nrow(m1)),]'有點奏效,但它保持每行相同的值,而對於(i in 1:ncol(m1))m2 [,i] < - m1 [order runif(length(m1 [i,]))),i]'真正將同一列中的值混洗。 – jpcgandre 2014-09-06 09:06:01

+1

您需要更具體地瞭解您想要的結果。 – 2014-09-06 09:08:11

+0

我只是想在每一列上拖動矩陣「m1」的值。所以洗牌(1,4,7),(2,5,8)和(3,6,9)。 – jpcgandre 2014-09-06 09:23:35