【问题标题】:Transforming a table in a 3D array in R在 R 中转换 3D 数组中的表格
【发布时间】:2012-07-19 20:20:06
【问题描述】:

我有一个矩阵:

R> pippo.m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
[5,]   17   18   19   20
[6,]   21   22   23   24

我想用 dim=(2,4,3) 将此矩阵转换为 3D 数组。通过 pippo.m 的 transponse,我可以获得类似的结果,但列和行旋转。

> pippo.t <- t(pippo.m)

> pippo.vec <- as.vector(pippo.t)

> pippo.arr <- array(pippo.vec,dim=c(4,2,3),dimnames=NULL)

> pippo.arr
 , , 1
     [,1] [,2]
 [1,]    1    5
 [2,]    2    6
 [3,]    3    7
 [4,]    4    8

 , , 2
     [,1] [,2]
[1,]    9   13
[2,]   10   14
[3,]   11   15
[4,]   12   16

, , 3
     [,1] [,2]
[1,]   17   21
[2,]   18   22
[3,]   19   23
[4,]   20   24

实际上,我更愿意保持原始数据的相同分布,因为行和列代表经度和纬度,第三维是时间。所以我想获得这样的东西:

pippo.a 
, , 1
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8


, , 2
     [,1] [,2] [,3] [,4]
[1,]    9   10   11   12
[2,]   13   14   15   16


, , 3
     [,1] [,2] [,3] [,4]
[1,]   17   18   19   20
[2,]   21   22   23   24

我该怎么办?

【问题讨论】:

    标签: r matrix multidimensional-array


    【解决方案1】:

    看看aperm 的魔力!

    m <- matrix(1:24,6,4,byrow = TRUE)
    > aperm(array(t(m),c(4,2,3)),c(2,1,3))
    , , 1
    
         [,1] [,2] [,3] [,4]
    [1,]    1    2    3    4
    [2,]    5    6    7    8
    
    , , 2
    
         [,1] [,2] [,3] [,4]
    [1,]    9   10   11   12
    [2,]   13   14   15   16
    
    , , 3
    
         [,1] [,2] [,3] [,4]
    [1,]   17   18   19   20
    [2,]   21   22   23   24
    

    【讨论】:

    • 或没有转置,aperm(array(m, c(2, 3, 4)), c(1,3,2))。这东西感觉就像一个魔方……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多