R 按行和列排列数据帧
有人知道如何将数据框中的所有数据随机化吗? 我的意思是,我将得到一个新的数据帧,其中数据按行和列排列,以获得一个新的数据帧,其编号与我在第一个数据帧中的编号相同 大概是这样的: 谢谢 只需对行数和列数分别使用R 按行和列排列数据帧,r,permutation,R,Permutation,有人知道如何将数据框中的所有数据随机化吗? 我的意思是,我将得到一个新的数据帧,其中数据按行和列排列,以获得一个新的数据帧,其编号与我在第一个数据帧中的编号相同 大概是这样的: 谢谢 只需对行数和列数分别使用sample(),然后使用sample()的结果进行索引 在矩阵上执行此操作要快得多: dm <- matrix(1:25, ncol = 5); dm dm[] <- sample(dm); dm dm随机化功能来自NMF软件包可能就是您想要的 从文档: 随机化排列独立地排列
sample()
,然后使用sample()
的结果进行索引
在矩阵上执行此操作要快得多:
dm <- matrix(1:25, ncol = 5); dm
dm[] <- sample(dm); dm
dm随机化
功能来自NMF
软件包可能就是您想要的
从文档:
随机化排列独立地排列列表中每列中的条目
类似于矩阵的对象,用于生成可用于
置换测试或引导分析
+1.我得到了完全相同的答案,甚至是函数名!“你在这里要快一点!”西蒙诺101现在你应该知道“等等”。(xkcd/1190)。同时,我只是想建议sample(as.matrix(df),prod(dim(df))
,但是Gavin的方法有一个小优点,就是返回一个数据帧。等一下:Gavin的函数完全按照OP的要求执行,而我的狡猾的代码将以不同的方式进行置乱。请注意,permDF
将一行中的所有元素保持在一起,尽管是以不同的行和顺序。因此,这取决于您希望结果的“随机性”。看看您的结果,我怀疑我的说法,即先在列中进行置换,然后对这些结果进行块置换,将得到与“完全”置换相同的结果。@DWin是的,这只是将行和列混洗,但将行和列中的元素保持在一起。如果你需要完全随机化,那么你的方式就是我的方式——我甚至开始为此编写编辑。我将添加一个不解释这一点的选项。为您添加+1!!在这种情况下,我总是忘记了[]
的威力。这是我在评论中提出的解决方案。。。。教我不要把帖子当作答案:-((即使是错误的答案——至少在@Gavin的例子中,它显然不是一个完全随机的序列,正如我在那里指出的那样)我不想说了。不清楚OP想要什么。我同意在一列中进行排列,然后在一个整体中对列进行排列,会得到不同的结果。
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
dm <- matrix(1:25, ncol = 5); dm
dm[] <- sample(dm); dm
dm <- dm[ sample(nrow(dm)), sample( ncol(dm)) ]