2010-10-26 13 views
6

Estoy tratando de transformar una matriz 3D en una matriz. Quiero que la tercera dimensión de la matriz forme la primera fila en la matriz, y esta tercera dimensión debe leerse por fila (es decir, la fila 1, luego la fila 2, etc. de la dimensión 3 debe constituir la primera fila del matriz). He dado un ejemplo a continuación, donde la matriz tiene dimensiones de 4, 3 y 5, y la matriz resultante tiene 5 filas y 12 columnas. Tengo una solución a continuación que logra lo que quiero, pero parece muy engorrosa para arreglos grandes (primero crea vectores a partir de los elementos de la matriz (por filas) y luego los combina para formar la matriz). ¿Hay una manera más elegante de hacer esto? Gracias de antemano por cualquier sugerencia.Transformar una matriz 3D en una matriz en R

dat <- array(rnorm(60), dim=c(4, 3, 5)) 

results <- list(1:5)    
for (i in 1:5) { 
    vec <- c(t(dat[, , i])) 
    results[[i]] <- vec 
    } 

datNew <- rbind(results[[1]], results[[2]], results[[3]], results[[4]], results[[5]]) 
+0

Usted debe cambiar la formulación. Probablemente quiera decir con "primer elemento" de una matriz, la matriz impresa cuando se imprime la matriz. Esas matrices son los elementos de la dimensión _3rd_ de la matriz. De su ejemplo, veo que solo desea aplanar las dos primeras dimensiones. Mi respuesta a continuación te da lo que quieres. – VitoshKa

+0

Gracias VitoshKa por señalar eso - Edité la pregunta. – Steve

Respuesta

16

Uso aperm

X <- aperm(dat,c(3,2,1)) 
dim(X)<- c(5, 12) 
+0

Esto funciona perfectamente, gracias. – Steve

Cuestiones relacionadas