2012-10-12 11 views
5

Wprowadzam dane R-wiersz jako główne jako wektor. R interpretuje to jako dane kolumnowo-główne i o ile widzę, nie ma sposobu, aby nakazać tablicy, aby zachowywała się w sposób główny.Przełączanie wierszy-głównych do głównych wymiarów kolumn

Powiedzmy mam:

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

Co daje:

, , t1 

    c1 c2 
r1 1 4 
r2 2 5 
r3 3 6 

, , t2 

    c1 c2 
r1 7 10 
r2 8 11 
r3 9 12 

Chcę, aby przekształcić te dane do row-major tablicy:

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

, , t2 

    c1 c2 
r1 7 8 
r2 9 10 
r3 11 12 

Odpowiedz

6

Zakładając, że tablica jest w a, tzn, że masz już tę tablicę i nie można go zmienić w momencie odczytu, a następnie dodaje zadziała:

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 
2

Rozwiązanie:

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

Należy pamiętać, że apermka zmienia wymiary. Zasadniczo kolumny są zamieniane na wiersze. Ponadto musiałem zmienić kolejność kolumn i wierszy w dimnam.

Produkuje dokładnie to, co jest potrzebne:

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

, , t2 

    c1 c2 
r1 7 8 
r2 9 10 
r3 11 12 
+1

Jestem zdezorientowany. Tablica, którą tu pokazujesz, jest * nie * tą, którą masz w swoim pytaniu. Zrozumiałem, że masz tablicę pokazanej postaci, w którym to przypadku sam 'aperm()' nie pomoże. –

+0

Chciałem przekształcić dane (wektor 1:12) w pożądaną tablicę. Spędziłem trochę czasu na zastanawianiu się nad tym i pomyślałem, że umieszczenie tego tutaj może pomóc komuś innemu. – Datageek

+1

Ah, OK. Kiedy napisałeś: "Powiedzmy, że mam", zabrałem cię dosłownie. –