2010-10-26 3 views
6

Я пытаюсь преобразовать 3D-массив в матрицу. Я хочу, чтобы третье измерение массива сформировало первую строку в матрице, и это третье измерение должно считываться по строке (т. Е. Строка 1, а затем строка 2 и т. Д. Размерности 3 должна составлять первую строку матрица). Я привел пример ниже, где массив имеет размеры 4, 3 и 5, а результирующая матрица имеет 5 строк и 12 столбцов. У меня есть решение ниже, которое достигает того, что я хочу, но оно кажется очень громоздким для больших массивов (оно сначала создает векторы из элементов массива (по строке), а затем обращает их в форму матрицы). Есть ли более элегантный способ сделать это? Спасибо заранее за любые предложения.Преобразование 3D-массива в матрицу в 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

Вы должны изменить формулировку. Вероятно, вы подразумеваете под «первым элементом» массива, который печатается при печати массива. Эти матрицы являются элементами _3rd_ измерения массива. Из вашего примера я вижу, что вы просто хотите сгладить первые два измерения. Мой ответ ниже дает вам то, что вы хотите. – VitoshKa

+0

Спасибо VitoshKa за то, что указали это - я редактировал вопрос. – Steve

ответ

16

Использование aperm

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

Это прекрасно работает, спасибо. – Steve

Смежные вопросы