【发布时间】:2014-09-06 08:02:40
【问题描述】:
如何在每列中随机排列矩阵 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
【讨论】:
rbind 而不是cbind 用于第二个片段?)。您是说您想改组第 1 行并将其存储在第 1 列中,将第 2 行改组并将其存储在第 2 列中,等等?如果是这样,只需从我的代码中删除 t。
> m1=cbind(c(1,2,3),c(4,5,6),c(7,8,9)) > m2 <- apply(m1, 1, sample) > m1 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > m2 [,1] [,2] [,3] [1,] 7 5 6 [2,] 4 8 3 [3,] 1 2 9
for (i in 1:ncol(m1)) m1[,i] <- m1[order(runif(length(m1[i,]))),i]这样的东西。
嗯,你的意思是在你的例子中的行?!
随机播放列表:
# 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
【讨论】:
m1[sample(nrow(m1)), ] 有点工作,但它保持每行相同的值,而 for (i in 1:ncol(m1)) m2[,i] <- m1[order(runif(length(m1[i,]))),i] 真正打乱同一列中的值。
m1 的值。所以随机播放 (1,4,7), (2,5,8) 和 (3,6,9)。