Транспонирование и изменение формы матриц
Используйте t(), dim() и операции изменения формы для матриц.
«Транспонирование и изменение формы матриц» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Транспонирование матрицы с помощью t()
t(m) транспонирует матрицу — меняет местами строки и столбцы, так что строка i становится столбцом i в результате. Размерности меняются местами: после транспонирования матрица 3x4 становится матрицей 4x3.
m <- matrix(1:6, nrow = 2, ncol = 3)
cat('Original (2x3):
'); print(m)
cat('Transposed (3x2):
'); print(t(m))
cat('Original dim:', dim(m), '-> Transposed dim:', dim(t(m)), '
')Транспонирование с именованными измерениями
Если у матрицы есть имена строк и столбцов, t() корректно меняет имена местами: имена строк становятся именами столбцов и наоборот. Благодаря этому после транспонирования данные сохраняют свои обозначения.
scores <- matrix(
c(88,92,75, 79,85,90),
nrow = 2, byrow = TRUE,
dimnames = list(c('Alice', 'Bob'), c('Math', 'Sci', 'Eng'))
)
cat('Original (students x subjects):
'); print(scores)
cat('Transposed (subjects x students):
'); print(t(scores))Изменение формы с помощью dim(m) <- c(r, c)
Вы можете изменить форму матрицы, заново присвоив её атрибуту dim новое значение. Общее число элементов должно остаться прежним. При изменении формы чтение и заполнение выполняются по столбцам, как и в matrix().
m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Original (3x4):
'); print(m)
# Reshape to 4x3
dim(m) <- c(4, 3)
cat('Reshaped to (4x3):
'); print(m)
# Reshape to 6x2
dim(m) <- c(6, 2)
cat('Reshaped to (6x2):
'); print(m)Преобразование матрицы в вектор с помощью as.vector()
as.vector(m) превращает матрицу в одномерный вектор, считывая значения по столбцам. Это удаляет у объекта все атрибуты размерности.
m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
'); print(m)
v <- as.vector(m)
cat('As vector (col-by-col):', v, '
')
cat('Is vector:', is.vector(v), '
')
cat('Is matrix:', is.matrix(v), '
')Преобразование вектора в матрицу с помощью as.matrix()
as.matrix(v) преобразует вектор в матрицу с одним столбцом. Это самый простой вариант преобразования. Затем можно изменить её форму с помощью dim(), задав нужные размерности.
v <- c(5, 10, 15, 20, 25, 30)
cat('Vector:', v, '
')
# as.matrix makes a 6x1 matrix
m_single_col <- as.matrix(v)
cat('Single-column matrix:
'); print(m_single_col)
cat('Dimensions:', dim(m_single_col), '
')rbind() — объединение строк
rbind() объединяет матрицы или векторы, складывая строки. Все входные данные должны иметь одинаковое число столбцов. В результирующей матрице число строк равно сумме числа строк входных данных.
first_half <- matrix(1:6, nrow = 2, ncol = 3)
second_half <- matrix(7:12, nrow = 2, ncol = 3)
combined <- rbind(first_half, second_half)
cat('rbind result (4x3):
'); print(combined)
cat('Dimensions:', dim(combined), '
')cbind() — объединение столбцов
cbind() объединяет матрицы или векторы, соединяя столбцы рядом. Все входные данные должны иметь одинаковое число строк. В результате получается общее число столбцов.
ids <- matrix(101:104, nrow = 4, ncol = 1)
scores_mat <- matrix(c(88,79,95,72, 92,85,78,90), nrow = 4)
full_data <- cbind(ids, scores_mat)
colnames(full_data) <- c('ID', 'Test1', 'Test2')
cat('cbind result:
'); print(full_data)rbind() и cbind() с именованными строками и столбцами
Когда вы применяете rbind() или cbind() к именованным матрицам или векторам, имена измерений сохраняются (а для векторов их имена становятся именами строк или столбцов).
# Add a new student row with rbind
existing <- matrix(c(88,92,75, 79,85,90), nrow = 2, byrow = TRUE,
dimnames = list(c('Alice','Bob'), c('Math','Sci','Eng')))
new_student <- c(Math=95, Sci=78, Eng=82)
updated <- rbind(existing, Carol = new_student)
cat('Updated roster:
'); print(updated)Тождество двойного транспонирования
Двойное применение t() возвращает исходную матрицу. Это удобная проверка корректности и демонстрация того, что транспонирование является обратной операцией для самой себя: t(t(m)) == m.
m <- matrix(c(1,2,3,4,5,6), nrow = 2)
cat('Original:
'); print(m)
cat('t(m):
'); print(t(m))
cat('t(t(m)):
'); print(t(t(m)))
cat('t(t(m)) == m:', all(t(t(m)) == m), '
')Практика: изменение формы в стиле сводной таблицы
Распространённая задача изменения формы — преобразование между широким и длинным форматами. Здесь мы вручную имитируем преобразование из широкого формата в длинный с помощью операций над матрицами: транспонирования, преобразования в одномерный вид и восстановления структуры.
# Wide: 3 students x 4 months scores
wide <- matrix(c(85,88,90,92, 78,80,79,83, 91,94,88,95),
nrow = 3, byrow = TRUE)
rownames(wide) <- c('Alice', 'Bob', 'Carol')
colnames(wide) <- c('Jan', 'Feb', 'Mar', 'Apr')
cat('Wide format:
'); print(wide)
# Transposed: 4 months x 3 students
long_view <- t(wide)
cat('Transposed (months x students):
'); print(long_view)Итоги изменения формы и объединения
Основные инструменты для изменения формы и объединения матриц:
t(m)— транспонирование (обмен строк и столбцов)dim(m) <- c(r, c)— изменение формы на месте (общее число элементов не меняется)as.vector(m)— преобразование в одномерный вектор (в порядке столбцов)as.matrix(v)— преобразование вектора в матрицу с одним столбцомrbind(...)— вертикальное объединение матрицcbind(...)— горизонтальное объединение матриц
# Demo all tools
v <- 1:6
m1 <- as.matrix(v) # 6x1
dim(m1) <- c(2, 3) # reshape to 2x3
m2 <- t(m1) # 3x2
m3 <- cbind(m2, c(10, 20, 30)) # 3x3
cat('Final matrix:
'); print(m3)Быстрая проверка
Какие размерности имеет результат t(matrix(1:12, nrow = 3, ncol = 4))?
Итоги: транспонирование и изменение формы
Отлично! Основные выводы этого урока:
t(m)меняет местами строки и столбцы;t(t(m))возвращает исходную матрицуdim(m) <- c(r, c)изменяет форму без копирования (необходимо сохранить то же число элементов)as.vector()преобразует матрицу в одномерный вид по столбцам;as.matrix()создаёт матрицу с одним столбцомrbind()объединяет строки (необходимо одинаковое число столбцов)cbind()соединяет столбцы рядом (необходимо одинаковое число строк)- Именованные измерения сохраняются при выполнении этих операций
# Practical: merge data then compute column means
team_a <- matrix(c(82,78,91, 85,80,88), nrow = 2, byrow=TRUE)
team_b <- matrix(c(75,92,79, 88,84,93), nrow = 2, byrow=TRUE)
all_teams <- rbind(team_a, team_b)
colnames(all_teams) <- c('Speed', 'Accuracy', 'Strength')
cat('Combined teams:
'); print(all_teams)
cat('Average per skill:', colMeans(all_teams), '
')Часто задаваемые вопросы
Урок «Транспонирование и изменение формы матриц» бесплатный?
Да — полный текст урока «Транспонирование и изменение формы матриц» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «Транспонирование и изменение формы матриц»?
Используйте t(), dim() и операции изменения формы для матриц. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Транспонирование и изменение формы матриц»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание матриц с помощью matrix()
- Индексация и выборка элементов матриц
- Арифметика и операции над матрицами
- Транспонирование и изменение формы матриц