0Pricing
R Academy · Lekcja

Transponowanie i zmiana kształtu macierzy

Używaj t(), dim() i operacji reshape na macierzach.

Transponowanie i zmiana kształtu macierzy to bezpłatna lekcja R Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Transponowanie macierzy za pomocą t()

t(m) transponuje macierz — zamienia wiersze i kolumny, tak że wiersz i staje się kolumną i w wyniku. Wymiary zostają zamienione: po transpozycji macierz 3x4 staje się macierzą 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)), '
')

Transpozycja z nazwanymi wymiarami

Gdy macierz ma nazwy wierszy i kolumn, funkcja t() prawidłowo je zamienia: nazwy wierszy stają się nazwami kolumn i odwrotnie. Dzięki temu dane zachowują etykiety po transpozycji.

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))

Zmiana kształtu za pomocą dim(m) <- c(r, c)

Można zmienić kształt macierzy, przypisując jej ponownie atrybut dim. Łączna liczba elementów musi pozostać taka sama. Podczas zmiany kształtu dane są odczytywane i wstawiane kolumna po kolumnie, tak jak w funkcji 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)

Konwersja macierzy na wektor za pomocą as.vector()

as.vector(m) spłaszcza macierz do jednowymiarowego wektora, odczytując wartości kolumna po kolumnie. Usuwa to wszystkie atrybuty wymiarów obiektu.

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), '
')

Konwersja wektora na macierz za pomocą as.matrix()

as.matrix(v) konwertuje wektor na macierz z jedną kolumną. Jest to najprostszy sposób konwersji. Następnie można zmienić jej kształt za pomocą dim(), aby uzyskać żądane wymiary.

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() — łączenie wierszy

rbind() łączy macierze lub wektory, układając wiersze jeden pod drugim. Wszystkie dane wejściowe muszą mieć taką samą liczbę kolumn. Wynikowa macierz ma łączną liczbę wierszy.

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() — łączenie kolumn

cbind() łączy macierze lub wektory, zestawiając kolumny obok siebie. Wszystkie dane wejściowe muszą mieć taką samą liczbę wierszy. Wynik ma łączną liczbę kolumn.

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() i cbind() z nazwanymi wierszami i kolumnami

Gdy używają Państwo rbind() lub cbind() dla nazwanych macierzy lub nazwanych wektorów, nazwy wymiarów zostają zachowane (w przypadku wektorów ich nazwy stają się nazwami wierszy lub kolumn).

# 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)

Tożsamość podwójnej transpozycji

Dwukrotne zastosowanie t() zwraca pierwotną macierz. Jest to przydatny test poprawności i pokazuje, że transpozycja jest operacją odwrotną do samej siebie: 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), '
')

Zastosowanie praktyczne: zmiana kształtu w stylu pivot

Typowym zadaniem związanym ze zmianą kształtu danych jest konwersja między formatem szerokim a długim. Tutaj symulujemy ręczne przekształcenie typu wide-to-long za pomocą operacji na macierzach — transponowania, spłaszczania i odtwarzania struktury.

# 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)

Podsumowanie zmiany kształtu i łączenia

Najważniejsze narzędzia do zmiany kształtu i łączenia macierzy:

  • t(m) — transpozycja (zamiana wierszy i kolumn)
  • dim(m) <- c(r, c) — zmiana kształtu w miejscu (wymagana ta sama łączna liczba elementów)
  • as.vector(m) — spłaszczenie do wektora 1D (porządek kolumnowy)
  • as.matrix(v) — konwersja wektora na macierz kolumnową
  • rbind(...) — pionowe łączenie macierzy
  • cbind(...) — poziome łączenie macierzy
# 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)

Szybkie sprawdzenie

Jakie wymiary ma wynik wyrażenia t(matrix(1:12, nrow = 3, ncol = 4))?

Podsumowanie: transponowanie i zmiana kształtu

Doskonale! Najważniejsze informacje z tej lekcji:

  • t(m) zamienia wiersze i kolumny; t(t(m)) zwraca pierwotną macierz
  • dim(m) <- c(r, c) zmienia kształt bez kopiowania (wymagana jest ta sama liczba elementów)
  • as.vector() spłaszcza dane kolumna po kolumnie, a as.matrix() tworzy macierz z jedną kolumną
  • rbind() łączy wiersze (wymagana jest taka sama liczba kolumn)
  • cbind() łączy kolumny obok siebie (wymagana jest taka sama liczba wierszy)
  • Nazwane wymiary są zachowywane podczas tych operacji
# 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), '
')

Często zadawane pytania

Czy lekcja „Transponowanie i zmiana kształtu macierzy” jest bezpłatna?

Tak — pełny tekst „Transponowanie i zmiana kształtu macierzy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Transponowanie i zmiana kształtu macierzy”?

Używaj t(), dim() i operacji reshape na macierzach. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Transponowanie i zmiana kształtu macierzy”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie macierzy za pomocą matrix()
  2. Indeksowanie i wybieranie podzbiorów macierzy
  3. Arytmetyka i operacje na macierzach
  4. Transponowanie i zmiana kształtu macierzy
← Powrót do R Academy