0Pricing
R Academy · 강의

행렬 전치와 형태 변경

행렬에서 t(), dim(), 형태 변경 연산을 사용합니다.

행렬 전치와 형태 변경은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

t()로 matrix 전치하기

t(m)은 matrix를 전치합니다. 즉, 행과 열을 뒤바꾸어 결과에서 i행이 i열이 되도록 합니다. 차원도 바뀌므로 3x4 matrix는 전치 후 4x3 matrix가 됩니다.

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

이름이 지정된 차원으로 전치하기

matrix에 행 이름과 열 이름이 있으면 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의 형태를 바꿀 수 있습니다. 전체 요소 개수는 그대로여야 합니다. 형태를 바꿀 때는 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()로 matrix를 vector로 변환하기

as.vector(m)는 matrix를 1차원 vector로 평평하게 만들며, 값을 열 단위로 읽습니다. 이 작업을 수행하면 객체에서 모든 차원 속성이 제거됩니다.

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()로 vector를 matrix로 변환하기

as.matrix(v)는 vector를 단일 열 matrix로 변환합니다. 가장 간단한 변환 방법입니다. 그런 다음 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()는 matrix나 vector를 행으로 쌓아 결합합니다. 모든 입력의 열 개수가 같아야 합니다. 결과 matrix는 입력된 행 개수를 합한 만큼의 행을 가집니다.

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()는 matrix나 vector를 나란히 열로 연결하여 결합합니다. 모든 입력의 행 개수가 같아야 합니다. 결과의 열 개수는 입력된 열 개수의 합이 됩니다.

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() 사용하기

이름이 지정된 matrix나 vector에 rbind() 또는 cbind()를 사용하면 차원 이름이 보존됩니다. vector의 경우에는 vector 이름이 행 이름이나 열 이름이 됩니다.

# 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()를 두 번 적용하면 원래 matrix가 반환됩니다. 이는 결과가 올바른지 확인하는 데 유용하며, 전치가 자기 자신의 역연산임을 보여 줍니다: 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), '
')

실습: 피벗 형태로 바꾸기

자주 수행하는 형태 변환 작업 중 하나는 넓은 형식과 긴 형식 사이를 변환하는 것입니다. 여기에서는 matrix 연산을 사용해 넓은 형식에서 긴 형식으로 수동 피벗하는 과정을 흉내 냅니다. 이 과정에서 전치하고, 평평하게 만들고, 구조를 다시 구성합니다.

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

형태 변환 및 결합 요약

matrix의 형태 변환과 결합에 사용하는 주요 도구는 다음과 같습니다.

  • t(m) — 전치(행과 열 바꾸기)
  • dim(m) <- c(r, c) — 제자리에서 형태 변환(전체 요소 개수는 동일해야 함)
  • as.vector(m) — 1차원 vector로 평평하게 만들기(열 우선)
  • as.matrix(v) — vector를 열 matrix로 변환
  • rbind(...) — matrix를 세로로 쌓기
  • cbind(...) — matrix를 가로로 연결
# 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))은 원래 matrix를 반환합니다.
  • dim(m) <- c(r, c)는 복사하지 않고 형태를 바꿉니다(요소 개수는 같아야 함).
  • as.vector()는 열 단위로 평평하게 만들고, as.matrix()는 단일 열 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 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“행렬 전치와 형태 변경”에서 뭘 배우나요?

행렬에서 t(), dim(), 형태 변경 연산을 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“행렬 전치와 형태 변경” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. matrix()로 행렬 만들기
  2. 행렬 인덱싱과 부분 집합
  3. 행렬 산술과 연산
  4. 행렬 전치와 형태 변경
← R Academy(으)로 돌아가기