행렬 전치와 형태 변경
행렬에서 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- matrix()로 행렬 만들기
- 행렬 인덱싱과 부분 집합
- 행렬 산술과 연산
- 행렬 전치와 형태 변경