R

[R] 자료형 - 4.matrix

ㄷㅐ장님 2022. 1. 12. 10:45

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,]