R - 分别随机化矩阵中的每一行

时间:2016-07-05 14:18:30

标签: r

我试图随机化一个矩阵,使每列中的每一行都是单独随机化的,这样在最终矩阵中列之间就没有关联。我知道我需要使用sample()函数和某种for(each column)循环,但我不确定如何去做。具体来说,我问的是如何编写一个循环遍历矩阵列的函数,并随机化每列的行。

编辑:我尝试实现的一个例子

原始矩阵:

       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

如您所见,每列中的行已单独随机化。

2 个答案:

答案 0 :(得分: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()设置随机种子,因此运行时会得到不同的结果。但你需要知道的是:结果是随机的。

如果您有数据框X,最好使用sapply()

sapply(X, sample)

答案 1 :(得分:0)

您可以为每列使用for循环。

或者您可以使用:

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