Объединение 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)
),
]