如何在没有 for 循环的情况下重塑基 R 中的矩阵?

How can I reshape a matrix in base R without a for loop?

我有一些数据具有以下维度 [100, 2, 100]。它代表 100 行观察值,2 列变量,在 100 次实验中重复。

我想将数据放在维度为 [10000, 2] 的矩阵中,我已经有效地消除了实验的概念。

python 中的 .reshape 之类的东西。

我找到了重塑包。但是我想知道没有它是否可以完成。 在 base R 中有比 for 循环更优雅的方法吗?

您可以简单地设置 dim 属性。

让我们以 3 x 2 x 3 数组为例:

example <- array(1:18, c(3, 2, 3))

example
#> , , 1
#> 
#>      [,1] [,2]
#> [1,]    1    4
#> [2,]    2    5
#> [3,]    3    6
#> 
#> , , 2
#> 
#>      [,1] [,2]
#> [1,]    7   10
#> [2,]    8   11
#> [3,]    9   12
#> 
#> , , 3
#> 
#>      [,1] [,2]
#> [1,]   13   16
#> [2,]   14   17
#> [3,]   15   18

要进入 2 列,我们可以这样做:

dim(example) <- c(9, 2)

example
#>       [,1] [,2]
#>  [1,]    1   10
#>  [2,]    2   11
#>  [3,]    3   12
#>  [4,]    4   13
#>  [5,]    5   14
#>  [6,]    6   15
#>  [7,]    7   16
#>  [8,]    8   17
#>  [9,]    9   18

reprex package (v2.0.1)

创建于 2022-04-02

让我们从一个较小的数组示例开始 m

m <- array(rep(1:100, 5), c(10, 2, 5))

这是一个 3 维数组

> m
, , 1

      [,1] [,2]
 [1,]    1   11
 [2,]    2   12
 [3,]    3   13
 [4,]    4   14
 [5,]    5   15
 [6,]    6   16
 [7,]    7   17
 [8,]    8   18
 [9,]    9   19
[10,]   10   20

, , 2

      [,1] [,2]
 [1,]   21   31
 [2,]   22   32
 [3,]   23   33
 [4,]   24   34
 [5,]   25   35
 [6,]   26   36
 [7,]   27   37
 [8,]   28   38
 [9,]   29   39
[10,]   30   40

, , 3

      [,1] [,2]
 [1,]   41   51
 [2,]   42   52
 [3,]   43   53
 [4,]   44   54
 [5,]   45   55
 [6,]   46   56
 [7,]   47   57
 [8,]   48   58
 [9,]   49   59
[10,]   50   60

, , 4

      [,1] [,2]
 [1,]   61   71
 [2,]   62   72
 [3,]   63   73
 [4,]   64   74
 [5,]   65   75
 [6,]   66   76
 [7,]   67   77
 [8,]   68   78
 [9,]   69   79
[10,]   70   80

, , 5

      [,1] [,2]
 [1,]   81   91
 [2,]   82   92
 [3,]   83   93
 [4,]   84   94
 [5,]   85   95
 [6,]   86   96
 [7,]   87   97
 [8,]   88   98
 [9,]   89   99
[10,]   90  100

如果你想把它重塑成50x2数组,我们可以试试

> apply(m, 2, `[`)
      [,1] [,2]
 [1,]    1   11
 [2,]    2   12
 [3,]    3   13
 [4,]    4   14
 [5,]    5   15
 [6,]    6   16
 [7,]    7   17
 [8,]    8   18
 [9,]    9   19
[10,]   10   20
[11,]   21   31
[12,]   22   32
[13,]   23   33
[14,]   24   34
[15,]   25   35
[16,]   26   36
[17,]   27   37
[18,]   28   38
[19,]   29   39
[20,]   30   40
[21,]   41   51
[22,]   42   52
[23,]   43   53
[24,]   44   54
[25,]   45   55
[26,]   46   56
[27,]   47   57
[28,]   48   58
[29,]   49   59
[30,]   50   60
[31,]   61   71
[32,]   62   72
[33,]   63   73
[34,]   64   74
[35,]   65   75
[36,]   66   76
[37,]   67   77
[38,]   68   78
[39,]   69   79
[40,]   70   80
[41,]   81   91
[42,]   82   92
[43,]   83   93
[44,]   84   94
[45,]   85   95
[46,]   86   96
[47,]   87   97
[48,]   88   98
[49,]   89   99
[50,]   90  100