有人知道如何随机化数据框中的所有数据?
我的意思是,我会得到一个新的数据框,其中数据按行和列排列,以获得与第一个相同数字的随机新数据框。
像这样的东西:
谢谢!
最佳答案
只需使用 sample()
分别对行数和列数进行索引,然后使用来自 sample()
的结果进行索引.
df <- data.frame(matrix(1:25, ncol = 5))
permDF <- function(x) {
nr <- nrow(x)
nc <- ncol(x)
x[sample(nr), sample(nc)]
}
> permDF(df)
X3 X4 X2 X1 X5
4 14 19 9 4 24
5 15 20 10 5 25
1 11 16 6 1 21
3 13 18 8 3 23
2 12 17 7 2 22
> permDF(df)
X1 X2 X4 X3 X5
2 2 7 17 12 22
4 4 9 19 14 24
1 1 6 16 11 21
3 3 8 18 13 23
5 5 10 20 15 25
请注意,这会将行和列中的值保持在一起,但列和行的顺序不同。如果您希望数据集完全随机化,那么使用数据框并没有真正简单的方法。我会使用矩阵来做到这一点,但它需要更多的工作,如@DWin 所示
mat <- matrix(1:25, ncol = 5)
pmat <- mat
set.seed(42)
pmat[] <- mat[sample(length(mat))]
pmat
> pmat
[,1] [,2] [,3] [,4] [,5]
[1,] 23 11 24 10 5
[2,] 25 21 20 9 8
[3,] 7 3 13 1 18
[4,] 19 12 4 16 2
[5,] 14 17 6 15 22
您可以使用与上述矩阵略有不同的索引,以与矩阵相同的方式对数据框进行操作
mat[sample(nrow(mat)), sample(ncol(mat))]
> set.seed(42)
> mat[sample(nrow(mat)), sample(ncol(mat))]
[,1] [,2] [,3] [,4] [,5]
[1,] 15 25 5 10 20
[2,] 14 24 4 9 19
[3,] 11 21 1 6 16
[4,] 12 22 2 7 17
[5,] 13 23 3 8 18
关于r - 按行和列排列数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487238/