Как развернуть матрицу в R
Например, у меня есть матрица:
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
Я хочу, чтобы это стало
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 9 10 11 12 13 14 15 16
Благодарю.
1 ответ
Позвольте мне подробнее остановиться на ответе Чжэюан Ли, поскольку эти вещи могут быть немного загадочными для непосвященных. В основном, то же самое matrix
Функция, используемая для создания матрицы из вектора, также может использоваться для изменения формы матрицы.
Все, что нужно понять, это то, что матрица очень похожа на вектор, но с $dim
атрибут для его формы, и что значения этого базового вектора хранятся в столбце.
Чтобы создать свою оригинальную матрицу, вы можете сделать:
A <- matrix(1:16, nrow=4, byrow=TRUE)
print(attributes(A))
byrow
аргумент говорит matrix
размещать элементы входного вектора в матрице по строкам, а не по столбцам. Однако это не меняет того факта, что после этого распределения внутреннее хранение значений в матрице по-прежнему выполняется по столбцам. byrow
Затем аргумент просто изменил порядок элементов в базовом векторе, что легко увидеть:
print(as.numeric(A))
То, что нам нужно, чтобы получить желаемый результат, это сначала получить последовательность в вашей матрице, упорядоченную по столбцу - так, чтобы основной вектор был 1:16
снова. Для этого мы можем использовать функцию транспонирования t()
, После транспонирования мы можем привести теперь хорошо упорядоченные значения в желаемую форму 2x8 в виде строки. Так:
B <- matrix(t(A), nrow=2, byrow=TRUE)
print(B)