从R

时间:2015-09-24 16:58:10

标签: arrays r dataframe

我在具有3600行和800列的2D数据帧中拥有雷达数据,我需要将其转换为具有10行,360列和800级的3D阵列。我需要将3600行拆分为10组360,并将800列转换为新阵列的级别。所以,而不是 -

> dim(REF)
[1] 3600  800

我需要将值放入表单 -

> dim(ref.array)
[1]  10 360 800

我知道这是一个非常基本的要求,但我记不起来了,因为自从我两年前上课以来,我没有多少使用过R。任何帮助将不胜感激。

编辑以回答以下问题。

如果我们采用@BondedDust使用的示例,我们将得到以下内容 -

d <- as.data.frame( matrix( 1:(3*4*5), 12, 5))
array( unlist(d), dim=c(3, 4, 5) ) 

, , 1

      [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2

      [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24

, , 3

      [,1] [,2] [,3] [,4]
[1,]   25   28   31   34
[2,]   26   29   32   35
[3,]   27   30   33   36

, , 4

      [,1] [,2] [,3] [,4]
[1,]   37   40   43   46
[2,]   38   41   44   47
[3,]   39   42   45   48

, , 5

         [,1] [,2] [,3] [,4]
[1,]   49   52   55   58
[2,]   50   53   56   59
[3,]   51   54   57   60

我正在寻找的是一个像这样组织的数组 -

, , 1

      [,1] [,2] [,3] [,4]
[1,]    1    2    3   4
[2,]    5    6    7   8
[3,]    9    10   11  12

, , 2

      [,1] [,2] [,3] [,4]
[1,]   13   14   15   16
[2,]   17   18   19   20
[3,]   21   22   23   24

, , 3

      [,1] [,2] [,3] [,4]
[1,]   25   26   27   28
[2,]   29   30   31   32
[3,]   33   34   35   36

, , 4

      [,1] [,2] [,3] [,4]
[1,]   37   38   39   40
[2,]   41   42   43   44
[3,]   45   46   47   48

, , 5

      [,1] [,2] [,3] [,4]
[1,]   49   50   51   52
[2,]   53   54   55   56
[3,]   57   58   59   60

1 个答案:

答案 0 :(得分:2)

不会这样做吗?

 new.arr <- array( unlist(dfrm), dim=c(10, 360, 800) ) )

这就是我所理解的任务,但如果不是,那么“精子”中就会有一个aperm功能。包装将允许&#34;置换&#34;尺寸:

d <- as.data.frame( matrix( 1:(3*4*5), 12, 5))
array( unlist(d), dim=c(3, 4, 5) ) 

##=========result============##
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2

     [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24

, , 3
snipped rest of output

由于现在很清楚你确实希望数组等效于byrow = TRUE(这不是R数组函数中的一个选项),所以这提供了所需的结果:

 aperm( array( unlist(d), dim=c(4, 3, 5) ) , c(2,1,3) )
#===============
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

, , 2

     [,1] [,2] [,3] [,4]
[1,]   13   14   15   16
[2,]   17   18   19   20
[3,]   21   22   23   24

Snipped rest of output.

我错误地认为aperm在另一个包中。