我试图随机化一个矩阵,使每列中的每一行都是单独随机化的,这样在最终矩阵中列之间就没有关联。我知道我需要使用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
如您所见,每列中的行已单独随机化。
答案 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))