Объединение 3 массивов по номеру строки

Есть ли способ объединить три массива в R, чтобы первая строка первого массива сопровождалась первой строкой второго массива, а за ней следует третья строка третьего массива? Итак, если я запустил следующий код:

> number1<-rbind(rep("A",3), rep("B",3), rep("C",3))
> number1
     [,1] [,2] [,3]
[1,] "A"  "A"  "A" 
[2,] "B"  "B"  "B" 
[3,] "C"  "C"  "C" 
> number2<-rbind(rep(1,3), rep(2,3), rep(3,3))
> number2
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
> number3<-rbind(rep("X",3), rep("Y",3), rep("Z",3))
> number3
     [,1] [,2] [,3]
[1,] "X"  "X"  "X" 
[2,] "Y"  "Y"  "Y" 
[3,] "Z"  "Z"  "Z"

Результат будет выглядеть так:

      [,1] [,2] [,3]
 [1,] "A"  "A"  "A" 
 [2,] "1"  "1"  "1" 
 [3,] "X"  "X"  "X" 
 [4,] "B"  "B"  "B" 
 [5,] "2"  "2"  "2" 
 [6,] "Y"  "Y"  "Y" 
 [7,] "C"  "C"  "C" 
 [8,] "3"  "3"  "3" 
 [9,] "Z"  "Z"  "Z"

Я попытался расплавиться, но я не могу заставить его работать.

Ответы

Ответ 1

Вы можете попробовать следующее:

> matrix(t(cbind(number1,number2,number3)),ncol=3, byrow=T)
#      [,1] [,2] [,3]
# [1,] "A"  "A"  "A" 
# [2,] "1"  "1"  "1" 
# [3,] "X"  "X"  "X" 
# [4,] "B"  "B"  "B" 
# [5,] "2"  "2"  "2" 
# [6,] "Y"  "Y"  "Y" 
# [7,] "C"  "C"  "C" 
# [8,] "3"  "3"  "3" 
# [9,] "Z"  "Z"  "Z" 

Ответ 2

Копирование подхода Аруна к чередованию двух списков...

intermat <- function(...) 
  do.call(rbind,list(...))[ 
    order(sapply(list(...),function(x) 1:nrow(x))), ]

intermat(number1,number2,number3)

      [,1] [,2] [,3]
 [1,] "A"  "A"  "A" 
 [2,] "1"  "1"  "1" 
 [3,] "X"  "X"  "X" 
 [4,] "B"  "B"  "B" 
 [5,] "2"  "2"  "2" 
 [6,] "Y"  "Y"  "Y" 
 [7,] "C"  "C"  "C" 
 [8,] "3"  "3"  "3" 
 [9,] "Z"  "Z"  "Z" 

Это также "работает" (т.е. делает что-то разумное) для матриц с различным количеством строк.

Ответ 3

Вид хаки, но, поскольку я набрал его, прежде чем @RHertel разместил превосходное решение:

wrong_order <- rbind (number1, number2, number3)
row_n <- nrow (wrong_order)

right_order <- wrong_order[ 
  c(seq (1, row_n, by=3),
    seq (2, row_n, by=3),
    seq (3, row_n, by=3)
    ),
  ]