행렬 인덱싱과 부분 집합
[row, col] 표기법으로 행, 열, 요소에 접근합니다.
행렬 인덱싱과 부분 집합은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
matrix 인덱싱 기초
matrix의 요소에 접근하려면 m[row, col] 표기법을 사용합니다. R에서 행과 열의 인덱스는 1부터 시작합니다. 쉼표는 반드시 필요합니다. 쉼표를 생략하면 matrix를 일반 vector로 취급합니다.
m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)
# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')
# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')전체 행 추출하기
전체 행을 추출하려면 열 인덱스를 비워 둡니다. 결과는 vector가 되며, matrix의 차원은 제거됩니다. 쉼표는 여전히 있어야 합니다.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)
# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')전체 열 추출하기
전체 열을 추출하려면 행 인덱스를 비워 둡니다. 행을 추출할 때와 마찬가지로 결과는 vector입니다. 행과 열의 위치를 구분하는 쉼표는 여전히 있어야 합니다.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean: ', mean(math_scores), '
')
cat('Math max: ', max(math_scores), '
')여러 행과 열 부분집합 추출하기
인덱스 vector를 사용하면 여러 행이나 열을 한 번에 추출할 수 있습니다. 결과는 부분 matrix이며 vector가 아닌 matrix로 유지되어 2차원 구조를 보존합니다.
m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)
# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')행/열 이름으로 접근하기
matrix에 행 이름과 열 이름이 있으면 위치 대신 이름으로 인덱싱할 수 있습니다. 이 방식은 읽기 쉽고, 행이나 열의 순서가 바뀌어도 안정적입니다.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE,
dimnames = list(
c('Alice', 'Bob', 'Carol'),
c('Math', 'Sci', 'Eng', 'Hist')
))
# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])matrix에서 논리 인덱싱하기
논리 vector(또는 논리 matrix)를 사용해 요소를 선택할 수 있습니다. 한 차원에서 논리 vector를 사용하면 값이 TRUE인 행이나 열이 선택됩니다.
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)음수 인덱싱 — 행/열 제외하기
특정 행이나 열을 제외하려면 인덱스 앞에 -를 붙입니다. 유지할 나머지 행이나 열을 모두 나열하지 않고도 특정 행이나 열을 제거할 수 있는 간단한 방법입니다.
m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)
# Drop row 2
cat('Without row 2:
')
print(m[-2, ])
# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])drop = FALSE로 단일 요소 유지하기
기본적으로 단일 행이나 열을 추출하면 차원이 제거되어 vector가 반환됩니다. drop = FALSE를 사용하면 결과를 matrix로 유지하여 행과 열 구조를 보존할 수 있습니다.
m <- matrix(1:9, nrow = 3, ncol = 3)
# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
') # numeric (vector)
# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')인덱스로 값 바꾸기
인덱싱과 할당을 함께 사용하면 특정 요소를 수정할 수 있습니다. 단일 요소, 전체 행, 전체 열 또는 부분 matrix에 모두 사용할 수 있습니다.
m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)
# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)
# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)선형(평면) 인덱싱
matrix는 내부적으로 평평한 vector로 저장되며, 열 단위로 저장됩니다. 이 평면 순서에서 단일 정수 인덱스를 사용해 요소에 접근할 수 있습니다. 대량 작업을 수행할 때 유용할 수 있습니다.
m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)
# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')
# Replace flat index 4
m[4] <- 99
print(m)인덱싱 요약
R에서 matrix 인덱싱을 빠르게 참고해 보세요.
m[r, c]— r행 c열의 단일 요소m[r, ]— r행 전체m[, c]— c열 전체m[c(r1,r2), c(c1,c2)]— 부분 matrixm['name', 'name']— 차원 이름으로 접근m[-r, ]— r행 제외m[logical_vec, ]— 논리값으로 행 선택m[r, , drop=FALSE]— matrix로 유지
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,] =', m[2,], '
')
cat('m[,3] =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])빠른 확인
행이 3개인 matrix m에서 m[-2, ]는 무엇을 반환하나요?
복습: matrix 인덱싱
잘하셨습니다! 이 레슨의 핵심 내용은 다음과 같습니다.
m[r, c]는 행, 그다음 열을 사용하며 두 위치는 쉼표로 구분합니다.- 한쪽을 비워 두면(
m[r, ]또는m[, c]) 전체 행이나 열을 추출할 수 있습니다. - 음수 인덱스는 행이나 열을 제외합니다.
- 논리 vector로 행이나 열을 필터링할 수 있습니다.
- 이름이 지정된 차원을 사용하면 읽기 쉬운 이름 기반 인덱싱이 가능합니다.
drop = FALSE를 사용하면 단일 행이나 열을 추출할 때 차원이 사라지는 것을 막을 수 있습니다.
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
for (subj in colnames(scores)) {
best <- rownames(scores)[which.max(scores[, subj])]
cat('Best in', subj, ':', best, '
')
}AI 튜터와 함께 R을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 43
- 레슨
- 159
자주 묻는 질문
“행렬 인덱싱과 부분 집합” 강의는 무료인가요?
네 — “행렬 인덱싱과 부분 집합” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“행렬 인덱싱과 부분 집합”에서 뭘 배우나요?
[row, col] 표기법으로 행, 열, 요소에 접근합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“행렬 인덱싱과 부분 집합” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- matrix()로 행렬 만들기
- 행렬 인덱싱과 부분 집합
- 행렬 산술과 연산
- 행렬 전치와 형태 변경