본문 바로가기
R 프로그래밍/R basic

[R데이터구조]행렬(matrix) 생성하기

by 찐남 2021. 7. 11.

1. 행렬(matrix) 설명

 

이번엔 행렬(matrix)에 대해 알아보자.

 

행렬(matrix)과 관련된 앞선 포스팅에서도 말했듯이,

행렬은 동일한 변수형을 가지는 2차원 데이터 구조이다.

숫자형 변수만 구성할 수 있는 게 아니란 얘기다.

 

3, 4는 1개의 행과 2개의 열로 이루어진 숫자형 변수(값)을 가지는 행렬이고, 

3

는 2개의 행과 1개의 열로 이루어진 숫자형 변수(값)을 가지는 행렬이다.

 

3, 4

5, 6

은 2개의 행과 2개의 열로 이루어진 숫자형 변수(원소)를 가지는 행렬이다.

 

유사하게 

("남성","여성")은 1개의 행과 2개의 열로 이루어진 문자형 변수(값)를 가지는 벡터이고, 

"남성", "20대"

"여성", "30대"

는 2개의 행과 2개의 열로 이루어진 문자형 변수(값)를 가지는 벡터이다.

 

 

 



 

 

 

2. 행렬(matrix) 생성

 

그럼 R에서 행렬을 생성시켜 보자 

R에서 벡터를 생성시키는 함수는 "matrix" 이다.

대문자가 아니라 소문자 이다.

(R은 대문자와 소문자를 구별한다. 꼭 참고하기 바란다.)

 

RStudio을 실행시키자.

(RStudio 설치방법은 RStudio설치하기를 참고하자)

 

matrix 함수에 대해서 살펴보자.

matrix 함수의 주요 인수는 5개이고,

matrix(data, nrow, ncol , byrow, dimnames)와 같이 구성된다.

각 인수에 대해서 알아보자.

data: 행렬을 구성하는 값

nrow: 생성하고자 하는 행렬에서 행의 수 지정

ncol: 생성하고자 하는 행렬에서 열의 수 지정

byrow: 논리연산자 (TRUE or FALSE). 행렬의 값을 입력하는 순서를 행 우선 or 열 우선 지정

          디폴트 값은 FALSE (즉, 열 우선으로 행렬 생성)

dimnames: 행렬의 행이름과 열이름을 지정해 주는 인수

               디폴트 값은 NULL. 굳이 지정해 주지 않아도 행렬은 생성된다.

 

행렬을 생성하기 위해 최소한으로 입력해야 하는 인수는 data 와 (nrow 혹은 ncol) 2개이다.

행렬을 구성하기 위한 값이 존재해야 하고,

행 혹은 열의 개수만 정의되면,행렬을 만들 수 있기 때문이다.

 

 

자 그럼! 3 4 5 6 7 8의 값을 가지는 2개의 행과 3개의 열로 이루어진 행렬을 생성해 보자.

---------------------------------------------------------------------------------------------------------------

matrix(data = c(3,4,5,6,7,8), nrow = 2) # 3,4,5,6,7,8의 값을 가지는 2개의 행으로 이루어진 행렬 생성

2개의 행과 3개의 열이 생성되고, 데이터 값의 순서는 열 우선으로 들어가 있음을 알 수 있다.

 

nrow 대신 ncol 인수를 사용해 보자.

matrix(data = c(3,4,5,6,7,8), ncol = 3) # 3,4,5,6,7,8의 값을 가지는 3개의 열로 이루어진 행렬 생성

동일한 행렬이 생성되었음을 확인할 수 있다.

 

이번엔 행과 열을 모두 지정해 보자.

matrix(data = c(3,4,5,6,7,8), nrow = 2, ncol = 3) # 3,4,5,6,7,8의 값을 가지는 2개의 행과 3개의 열로 이루어진 행렬 생성

결과는 역시 동일하다!!!!

 

그럼 이번엔 byrow 인수를 사용해서 행렬의 값이 생성되는 순서를 변경해 보자.

행렬의 구조는 동일하지만(2개의 행과 3개의 열로 이루어짐),

데이터가 열 우선으로 생성되었음을 알 수 있다.

 

그럼 마지막으로 행과 열에 이름을 부여해 보자.

출력된 행령에 행이름과 열이름이 각각 부여되었음을 알 수 있다.

 

상기 행렬을 mat 이라는 object를 생성하여 저장해 보자.

 

행렬에서도 벡터와 마찬가지로 특정 원소만 추출할 수 있다.

방법은 벡터와 굉장히 유사하다. 차원만 하나 증가했을 뿐이다.

 

그럼 첫번째 행의 두번째 열의 원소를 출력해 보자.

mat[1,2]    # 첫번째 행과 두번째 열의 원소 출력

4가 출력됨을 알 수 있다.

 

첫번째 행과 모든 열의 원소를 출력해 보자.

mat[1,c(1,2,3)]  # 첫번째 행과 첫번째, 두번째, 세번째 열의 원소 출력

3 4 5 가 출력됨을 알 수 있다.

열의 개수가 매우 많을 때는 위와 같이 하나씩 나열하기가 매우 번거롭다.

아래 처럼 단순하게 작성할 수 있다.

 

mat[1,]  # 첫번째 행과 모든 열의 원소 출력

유사하게 모든 행과 특정 열의 원소만을 출력할 수도 있다.

 

mat[, c(1,2)]  # 모든 행과 첫번째, 두번째 열의 원소 출력

또한, 벡터와 유사하게 특정 행과 열을 제외하고 출력할 수 있다.

 

mat[, -c(1,2)] # 모든 행은 출력하고, 첫번째와 두번째 열은 제외 후 출력

문자형으로 이루어진 행렬 또한 위와 같은 모든 방법이 적용될 수 있으니,

동일한 방법으로 실습해 보자.

 

숫자와 문자가 혼합되어 있을 땐?

결과는 벡터와 동일하다.

 

이 역시 각자 실습해 보자.

 

잊지말자! 행렬은 동일한 형식으로 이루어진다는 것을!!!! (초기에 개념을 잘 잡길 바란다.)

 

다음 포스팅에서는 배열(array)을 생성하는 함수에 대해서 알아보도록 하자!

 



반응형

댓글