我正在尝试随机化一个矩阵,以便每列中的每一行都单独随机化,以便在最终矩阵中列之间没有关联。我知道我需要使用 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
如您所见,每列中的行已分别随机化。
最佳答案
如果你有一个矩阵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)
关于R - 分别随机化矩阵中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205835/