我怎麼可以在每列洗牌矩陣m1
值:洗牌列值,但保持相同的矩陣列順序
初始:
m1=cbind(c(1,2,3),c(4,5,6),c(7,8,9))
做一些事情,:
m1=cbind(c(7,5,3),c(4,2,9),c(1,8,6))
謝謝
我怎麼可以在每列洗牌矩陣m1
值:洗牌列值,但保持相同的矩陣列順序
初始:
m1=cbind(c(1,2,3),c(4,5,6),c(7,8,9))
做一些事情,:
m1=cbind(c(7,5,3),c(4,2,9),c(1,8,6))
謝謝
你可以請在每列上調用sample
函數你的矩陣來將它洗:
set.seed(100)
apply(m1, 2, sample)
# [,1] [,2] [,3]
# [1,] 1 5 8
# [2,] 3 4 9
# [3,] 2 6 7
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
你也可以把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
我要的是重新洗牌每一列的列值,所以對於第1列我洗牌值1,4和7. – jpcgandre 2014-09-06 08:29:13
@jpcgandre在你的問題中的例子,它看起來像你只是每洗牌w(也許你的意思是'rbind'而不是'cbind'作爲第二個snippit?)。你是說你想改組第1行並將它存儲在第1列中,將第2行存儲在第2列中?如果是這樣,只需從我的代碼中刪除't'。 – josliber 2014-09-06 08:34:25
好的就是這樣!謝謝 – jpcgandre 2014-09-06 08:35:37