728x90

이번에는 행렬이라는 데이터 객체에 대하여 살펴봅니다.

행렬은 고등학교나 대학교에서 선형대수학 등 수학에서 다루었던 기억이 있을 것입니다.

이렇게 수학에서 사용되면서 일반인들에게 다소 생소한 행렬이 R에서는 데이터의 기본 객체 형태로 사용됩니다.

행렬은 행과 열로 구성된 사각형태의 데이터로 2차원적인 구조를 가집니다.

행렬은 행과 열의 개수, 행과 열의 이름을 속성으로 가지고 있습니다.

앞서 설명한 벡터 여러 개를 행 또는 열로 구성하면 행렬이 됩니다.

행렬은 만드는 방법은 2 가지가 있습니다.

벡터 여러 개를 이용하여 행 또는 열결합하여 만드는 방법과 하나의 벡터를 이용하여 행렬구조로 바꾸는 것입니다.

행렬을 만드는 방법으로 matrix( ) 함수를 이용하거나 다른 데이터 객체에 as.matrix( ) 함수를 적용시키면 됩니다.

 

1. 행렬 만들기

 (1) 두 개의 벡터로 합쳐기 - cbind( ),  rbind( ) 이용

 

rbind( ) 힘수를 이용

> vec01 <- c(1,2,3)

> vec02 <- c(10,20,30)

> mat01 <- rbind(vec01,vec02) # 행방향으로 붙이기

> mat01

[,1] [,2] [,3]

v1 1 2 3

v2 10 20 30

 

cbind( ) 힘수를 이용

> mat022 <- cbind(vec01,vec02) # 열방향으로 붙이기

> mat022

v1 v2

[1,] 1 10

[2,] 2 20

[3,] 3 30

 

m2 <- rbind(m1,m1);m2

m2 <- cbind(m1,m1);m2

m3 <- m2 [1:2,2:3]; m3

 

(2) matrix() 함수를 이용

 

# 벡터를 2 by 3 행렬로 만든다.

> matrix(c(1,2,3,4,5,6),2,3)

> matrix(vec01,c(2,3));

 

# 벡터를 열이 3인 행렬로 만든다.

> matrix(c(1,2,3,4,5,6),ncol=3)

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

 

# 벡터를 행이 3인 행렬로 만든다.

> matrix(c(1,2,3,4,5,6),nrow=3)

 

# 열이 3인 행렬을 만들되, 행방향을 우선적으로 고려합니다.

> matrix(c(1,2,3,4,5,6),ncol=3,byrow=T)

 

# 2 X 3 크기인 행렬을 만들되, 행방향을 우선적으로 고려합니다.

> matrix(c(1,2,3,4,5,6),2,3,byrow=T)

 

# 0 행렬만들기

> matrix(0,2,3) # 0 행렬만들기

 

(3) dim( ) 함수를 이용

 

자주 사용되지는 않지만 dim() 함수를 이용하여 행렬의 차원을 지정함으로써 행렬을 만들 수 있습니다.

 

> vec01 <- c(1,2,3,4,5,6)

> dim(vec01) <- c(2,3)

> vec01

 

(4) 행렬의 속성 살펴보기

 

> vec01 <- c(1,2,3,4,5,6)

> mat01 <- matrix(vec01,nrow=3,ncol=2)

mode(m1) # "numeric"

length(m1) # 6

class(m1) # matrix

head(m1) # 6개 요소를 출력

str(m1) # 행렬의 구조를 출력

dim(m1) # 행렬의 차원 (2 3) 벡터로

vdim <- dim(m1) ; is.vector(vdim) # TRUE

 

m1

is.matrix(m1)

is.array(m1)

 

2. 행렬 요소에 접근하기

 (1) 위치 번호로 요소 접근하기

 

한 원소만 지정하기

  > mat01 <- matrix(c(1,2,3,4,5,6),nrow=2,byrow=T);mat01

> mat01[2:5] # 3~5 째 요소 ( 4 2 5 3)

 

원소의 범위를 지정하기

> mat01[,3] # 3 (3 6)

> mat01[1,] # 1 ( 1 2 3)

> mat01[2] # 2 번째 요소 (4)

> mat01[2,2:3] # 2번째 행, 2-3 요소(5,6)

 

특정 원소 제외하기

> mat01[,-3] # 3 제외하기

> mat01[,-(2:3)] # 2~3 제외하기, 1행만 남음

 

참고로 subset( ) 함수를 사용하여 행렬의 일부를 추출할 수 있습니다.
이는 7.R 프로그램 (2)에서 설명하고 있습니다.

subset(mat01,select=col03)

subset(mat01,select=c(col01,col03))

 

(2) 이름으로 행렬의 요소 접근하기

 

행렬에 이름 붙이기

#행렬에 이름붙이기

rownames(mat01) <- c("row01","row02")

colnames(mat01) <- c("col01","col02","col03")

mat01

 

 

 

 

 

+ Recent posts