r - 按行和列排列数据框

标签 r permutation

有人知道如何随机化数据框中的所有数据?
我的意思是,我会得到一个新的数据框,其中数据按行和列排列,以获得与第一个相同数字的随机新数据框。

像这样的东西:

谢谢!

最佳答案

只需使用 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/

相关文章:

r - 一个内核上的所有作业都因 R 多核而失败

r - mc.cores > 1 在 Windows 上不受支持

r - 使用 RecordLinkage 为每个人添加一个带有数字的列

r - 尽管 "na.action"设置为 "na.roughfix",但缺少值错误

r - 使用 R 解决 Lucky 26 游戏

python - 获取用零填充列表的所有排列

r - 无法使用 MonetDB 和 MonetDBLite 在 R 中组合大型调查数据帧

生成均匀分布的随机排列的算法

performance - Shingleprinting 在实践中是如何工作的?

python - 字符串所有可能情况的组合