Преобразуйте трехмерный массив в матрицу в R - PullRequest
6 голосов
/ 26 октября 2010

Я пытаюсь преобразовать трехмерный массив в матрицу. Я хочу, чтобы третье измерение массива сформировало первую строку в матрице, и это третье измерение должно быть прочитано по строке (т. Е. Строка 1, затем строка 2 и т. Д. ... измерения 3 должны составлять первую строку матрица). Ниже приведен пример, где массив имеет размеры 4, 3 и 5, а полученная матрица имеет 5 строк и 12 столбцов. У меня есть решение ниже, которое достигает того, что я хочу, но оно кажется очень громоздким для больших массивов (сначала он создает векторы из элементов массива (по строкам), а затем связывает их для формирования матрицы). Есть ли более элегантный способ сделать это? Заранее спасибо за любые предложения.

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]] )  

Ответы [ 2 ]

16 голосов
/ 26 октября 2010

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

X <- aperm(dat,c(3,2,1))
dim(X)<- c(5, 12)
0 голосов
/ 29 апреля 2019

Ответ в одну строку:

t(apply(dat,3,"c"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...