Преобразовать 2d в 3D матрицу со строками в виде столбцов и столбцами в качестве 3-го измерения

#r

#r

Вопрос:

Как бы я изменил форму матрицы, в которой мне понадобились бы каждые 2 строки, чтобы начать новый столбец, и каждый столбец должен быть в третьем измерении в R? Я действительно не пробовал ничего, кроме dim() того, что, очевидно, не сработало, так как мне трудно обдумать это преобразование.

Что у меня есть:

 d h
c g
b f
a e
  

Чего я хочу:

 [ , , 1]
b d
a c

[ , , 2]
g h
e f
  

Ответ №1:

Я думаю, вы можете получить требуемую структуру вашей матрицы, настроив dim атрибут.

Я добавил две дополнительные строки в вашу матрицу, это выглядит так :

 mat <- structure(c("d", "c", "b", "a", "k", "l", "h", "g", "f", "e", 
"j", "m"), .Dim = c(6L, 2L))
mat

#    [,1] [,2]
#[1,] "d"  "h" 
#[2,] "c"  "g" 
#[3,] "b"  "f" 
#[4,] "a"  "e" 
#[5,] "k"  "j" 
#[6,] "l"  "m" 
  

Чтобы перевести каждый столбец в 3-е измерение и только 2 значения в каждом столбце, вы можете сделать :

 dim(mat) <- c(2, nrow(mat)/2, ncol(mat))
mat

#, , 1

#     [,1] [,2] [,3]
#[1,] "d"  "b"  "k" 
#[2,] "c"  "a"  "l" 

#, , 2

#     [,1] [,2] [,3]
#[1,] "h"  "f"  "j" 
#[2,] "g"  "e"  "m"  
  

Ответ №2:

Мы можем использовать array

  array(t(df1), c(2, 2, 2))