开关行主要以列主要方面 [英] Switching row-major to column-major dimensions

查看:96
本文介绍了开关行主要以列主要方面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我把成R行-主要数据作为载体。 - [R间$ P $点这是列为主的数据和据我可以看到有没有办法告诉阵列中的行主的行为方式。

让我们说我有:

 阵列(1:12,C(3,2,2),
    dimnames =名单(三(R1,R2,R3),C(C1,C2),C(T1,T2))

这给出了:

 ,T1   C1 C2
R1 1 4
R2 2 5
R3 3 6,T2   C1 C2
R1 7 10
R2 8 11
R3 9 12

我想要改造这个数据行主要数组:

 ,T1
   C1 C2
R1 1 2
R2 3 4
R3 5 6,T2   C1 C2
R1 7 8
R2 9 10
R3 11 12


解决方案

假设你的数组是在 A ,即你已经有这个数组并且不能更改它的读取时间,那么下面的工作:

  A<  - 阵列(1:12,C(3,2,2),
           dimnames =名单(三(R1,R2,R3),C(C1,C2),C(T1,T2)))B< - aperm(阵列(A,昏暗= C(2,3,2),
                 dimnames = dimnames(一)[2:1]),
           烫发= C(2,1,3))
b> b
,1   C1 C2
R1 1 2
R2 3 4
R3 5 6,2   C1 C2
R1 7 8
R2 9 10
R3 11 12

I am putting into R a row-major data as a vector. R interprets this as column-major data and as far as I can see there is no way to tell array to behave in a row-major way.

Let's say I have:

array(1:12, c(3,2,2), 
    dimnames=list(c("r1", "r2", "r3"), c("c1", "c2"),c("t1", "t2"))
)

Which gives:

, , t1

   c1 c2
r1  1  4
r2  2  5
r3  3  6

, , t2

   c1 c2
r1  7 10
r2  8 11
r3  9 12

I want to transform this data to row-major array:

, , t1
   c1 c2
r1  1  2
r2  3  4
r3  5  6

, , t2

   c1 c2
r1  7  8
r2  9 10
r3 11 12

解决方案

Assuming that your array is in a, i.e. that you already have this array and can't change it at read time, then the following will work:

a <- array(1:12, c(3,2,2), 
           dimnames=list(c("r1", "r2", "r3"), c("c1", "c2"),c("t1", "t2")))

b <- aperm(array(a, dim = c(2,3,2),
                 dimnames = dimnames(a)[2:1]),
           perm = c(2,1,3))
b

>     b
, , 1

   c1 c2
r1  1  2
r2  3  4
r3  5  6

, , 2

   c1 c2
r1  7  8
r2  9 10
r3 11 12

这篇关于开关行主要以列主要方面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆