随机播放R中的数据帧

问题描述 投票:0回答:1

[谁会偶然知道如何在R中编写数据集的改写,因此,如果我在一个数据帧中有25个数字(5行x 5列),并且我分别改写了25次,则每个数字都会准确地出现在每个位置一度?

因此,它并不是完全随机的,至少在第一次洗牌之后并不如此,因为随着每次洗牌,任何数量的潜在位置都会减少。

谢谢!

r dataframe shuffle
1个回答
0
投票

我将在3 x 3的数据集中演示该解决方案。我要做的第一件事是将data.frame转换为矩阵,以便能够轻松应用排列。

假设我们有一个3x3矩阵:

set.seed(1)
m <- matrix(sample(1:100, 9), nrow = 3)
m
#>      [,1] [,2] [,3]
#> [1,]   68   34   14
#> [2,]   39   87   82
#> [3,]    1   43   59

然后可以通过数字1到9的排列来定义每个随机播放。

shuffle <- c(9, 4, 7, 1, 8, 3, 2, 5, 6)
matrix(m[shuffle], nrow = 3)
#>      [,1] [,2] [,3]
#> [1,]   59   68   39
#> [2,]   34   82   87
#> [3,]   14    1   43

因此,我们的任务是生成9个这样的排列,其中每个数字在每个位置上均出现一次。例如。第一次洗牌c(9, 4, 7, 1, 8, 3, 2, 5, 6)时,我们就不能拥有c(9, 2, 7, 3, 8, 5, 4, 6, 1),因为9已经在首位。

基本上我们需要的是9 x 9 latin square。幸运的是,有一个用于处理此类事情的程序包:

library(magic)
#> Loading required package: abind
set.seed(1)
shuffles_matrix <- latin(9)
shuffles_matrix
#>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
#>  [1,]    1    2    3    4    5    6    7    8    9
#>  [2,]    9    1    2    3    4    5    6    7    8
#>  [3,]    8    9    1    2    3    4    5    6    7
#>  [4,]    7    8    9    1    2    3    4    5    6
#>  [5,]    6    7    8    9    1    2    3    4    5
#>  [6,]    5    6    7    8    9    1    2    3    4
#>  [7,]    4    5    6    7    8    9    1    2    3
#>  [8,]    3    4    5    6    7    8    9    1    2
#>  [9,]    2    3    4    5    6    7    8    9    1

现在我们可以将此正方形的每一行都视为原始3x3矩阵的混洗:

shuffles <- split(shuffles_matrix, 1:9)
shuffles
#> $`1`
#> [1] 1 2 3 4 5 6 7 8 9
#> 
#> $`2`
#> [1] 9 1 2 3 4 5 6 7 8
#> 
#> $`3`
#> [1] 8 9 1 2 3 4 5 6 7
#> 
#> $`4`
#> [1] 7 8 9 1 2 3 4 5 6
#> 
#> $`5`
#> [1] 6 7 8 9 1 2 3 4 5
#> 
#> $`6`
#> [1] 5 6 7 8 9 1 2 3 4
#> 
#> $`7`
#> [1] 4 5 6 7 8 9 1 2 3
#> 
#> $`8`
#> [1] 3 4 5 6 7 8 9 1 2
#> 
#> $`9`
#> [1] 2 3 4 5 6 7 8 9 1

这就是我们将这些混洗应用于矩阵的方式:

library(purrr)
shuffles %>% 
  map(~matrix(m[.], nrow = 3))
#> $`1`
#>      [,1] [,2] [,3]
#> [1,]   68   34   14
#> [2,]   39   87   82
#> [3,]    1   43   59
#> 
#> $`2`
#>      [,1] [,2] [,3]
#> [1,]   59    1   43
#> [2,]   68   34   14
#> [3,]   39   87   82
#> 
#> $`3`
#>      [,1] [,2] [,3]
#> [1,]   82   39   87
#> [2,]   59    1   43
#> [3,]   68   34   14
#> 
#> $`4`
#>      [,1] [,2] [,3]
#> [1,]   14   68   34
#> [2,]   82   39   87
#> [3,]   59    1   43
#> 
#> $`5`
#>      [,1] [,2] [,3]
#> [1,]   43   59    1
#> [2,]   14   68   34
#> [3,]   82   39   87
#> 
#> $`6`
#>      [,1] [,2] [,3]
#> [1,]   87   82   39
#> [2,]   43   59    1
#> [3,]   14   68   34
#> 
#> $`7`
#>      [,1] [,2] [,3]
#> [1,]   34   14   68
#> [2,]   87   82   39
#> [3,]   43   59    1
#> 
#> $`8`
#>      [,1] [,2] [,3]
#> [1,]    1   43   59
#> [2,]   34   14   68
#> [3,]   87   82   39
#> 
#> $`9`
#>      [,1] [,2] [,3]
#> [1,]   39   87   82
#> [2,]    1   43   59
#> [3,]   34   14   68
© www.soinside.com 2019 - 2024. All rights reserved.