[R] 자료형 - 4.matrix
4. matrix(행렬)
: 수나 문자를 직사각형 형태로 나타낸 자료형
-벡터처럼 한가지 유형의 타입만 저장한다.
-행(가로) 열(세로) 구성된다
matrix(c(1:9),nrow=3) : nrow 행의수
matrix(c(1:9),ncol=3) : ncol 열의수
matrix(c(1:10),nrow=2,ncol=5)
dim(x) : 행렬의 크기, 행의수x열의수
NROW(x), nrow(x) : 행의수
NCOL(x), ncol(x) : 열의수
length(x) : 행렬 안에 들어있는 값의 수
dim(x)[1] : 행의수 dim(x)[2] : 열의수
matrix(c(1:9),ncol=3,byrow=FALSE)
: byrow=FALSE : 열기준으로 값을 채움. 기본값
matrix(c(1:9),ncol=3,byrow=TRUE)
: byrow=TRUE : 행기준으로 값을 채움
dimnames(x)[1] :행의 이름 출력
dimnames(x)[[1]] :행의 값만 출력
dimnames(x)[2] :열의 이름 출력
dimnames(x)[[2]] : 열의 값만 출력
행열의 이름 수정
dimnames(y) <- list(c('row1','row2','row3'),c('col1','col2','col3'))
행이름 수정
rownames(y) <- c('r1','r2','r3')
dimnames(y)[[1]] <- c('row1','row2','row3')
rownames(y)[which(rownames(y) %in% 'r2')] <- 'row2'
열이름수정
colnames(y) <- c('c1','c2','c3')
dimnames(y)[[2]] <- c('col1','col2','col3')
colnames(y)[2] <-'c2'
colnames(y)[which(colnames(y) %in% 'c2')] <- 'col2'
행렬 만들기
cell <- c(1:9)
rname <- c('a','b','c')
cname <- c('c1','c2','c3')
x <- matrix(cell,nrow=3,byrow=T,dimnames=list(rname,cname))
전치행렬(transposed matrix)
: 행과 열의 위치를 바꾼 행렬
t(x)
dim(x) <- c(3,5)
: 5행 3열 -> 3행 5열 수정
인덱싱
x[1,1] : [행인덱스,열인덱스]
x[2,] : [행인덱스,]
x[,3] : [,열인덱스]
x['a',] : 행이름으로 추출
x[,'c3'] : 열이름으로 추출
which(x==5) : 행렬안에 값을 열기준으로 찾는다.
x[-1,] : 특정한 행 제외
x[,-2] : 특정한 열 제외
x[-1,-2] : 특정한 행,열 제외
x[c(1,3),] : 특정한 행들 추출
x[,c(2,3)] : 특정한 열들 추출
x[c(1,3),2] : 특정한 행과 열 추출
행렬의 연산 x+10 x-10 x*10 x/2 x%/%2 x%%2
☞행렬의 같은 위치에 있는 성분끼리 연산 작업을 수행한다.
행렬끼리의 곱 x %*% y
1 3 %*% 5 7 = (15+36) (17+38)
2 4 6 8 (25+46) (27+48)
dim(x) dim(y) : 행렬끼리 크기가 같아야함
정방행렬(square matrix)
: 같은 수의 행과 열을 가지는 행렬 2*2, 3*3, 4*4
항등행렬(identity matrix), 단위행렬(unit matrix)
: 대각성분이 모두 1이고 그 이외의 모든 성분이 0인 정방행렬
diag(x)
대각행렬(diagonal matrix)
: 대각성분이 아닌 모든 성분이 0인 행렬
a <- c(1:3)
diag(a)
diag(2,nrow=3)
diag(7,nrow=5)
역행렬(invertible matrix)
solve()
x %*% solve(x) = 단위행렬
결합 : 벡터의 길이가 같아야 함
x <- c(1:4)
y <- c(5:8)
z <- cbind(x,y) :열결합
r <- rbind(x,y) :행결합
[문제16] x 변수에 행렬을 구성하세요. 값은 1부터 10까지 입력하시고 5행 2열으로 만들면서 값은 열을 기준으로 생성하세요.
x <- matrix(c(1:10),nrow=5,ncol=2,byrow=FALSE)
[문제17] x 변수에 열을 기준으로 11,12,13,14,15 값을 추가하세요.
x <- cbind(x,11,12,13,14,15)
[문제18] x 변수에 행을 기준으로 16,17,18 값을 추가하세요.
x <- rbind(x,16,17,18)
[문제19] x변수에 6행의 값을 20,21,22 로 수정하세요.
x[6,] <- 20,21,22
[문제20] x 변수에 6행을 제거해주세요.
x <- x[-6,]