Как развернуть матрицу в 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)
Другие вопросы по тегам