SW/R

R : 매트릭스(matrix) 개념 및 예제

얇은생각 2019. 2. 2. 12:30
반응형

matrix

1차원 데이터를 저장하기 위해서는 vector라고 하는 자료 구조에 저장을 했습니다. 이제는 2차원 데이터를 저장하는 내용을 학습을 시작할 텐데요. 보통 분석을 위해서 데이터를 얻게 되면 1차원 데이터인 경우도 많이 있습니다. 그렇지만 거의 대부분은 2차원 형태 엑셀의 테이블 형태로 되어있는 자료 구조가 대부분입니다. 그래서 R에서는 이런 2차원 형태의 데이터를 저장하기 위해서 matrix하고 data fame이라고 하는 장치를 제공합니다. matrix와 data fame 둘 다 2차원 데이터를 저장할 수 있습니다. 그런데 matrix는 그 matrix에 저장되는 모든 자료의 종류가 동일해야 합니다. 그에 비해서 data fame은 2차원 데이터를 저장하는데, 숫자와 문자 이런 것들을 섞어서 저장할 수 있습니다.



매트릭스1


왼쪽에 있는 것은 matrix, 오른쪽에 있는 것은 data fame입니다. 보면 data fame은 첫 번째 하고 두 번째는 숫자인데, 세 번째가 문자입니다. 이런 식으로 섞어서 저장을 할 수 있습니다. 다만 data fame이라도 어떤 특정한 column, column 단위로 쪼개보면 column 안에서는 종류가 같아야 하지만 전체적으로 보면 문자 column도 있고 숫자 column도 있고, 이러한 형태가 data fame입니다. matrix는 모두 다 문자 column이든지 모두 다 숫자 column이든지 전체적으로 동일한 데이터가 저장되는 구조가 matrix가 되겠습니다. 그래서 주로 숫자로만 구성된 그런 자료들은 matrix에 저장할 수가 있습니다. 물론 숫자로만 구성된 것도 data fame에 저장은 할 수 있습니다. 



matrix 생성

매트릭스2


matrix는 어떻게 만들까요? matrix는 2차원 데이터이기 때문에 행과 열이 존재합니다. 예를 보면 1:20 그러면 1에서 20까지입니다. 그러면 20개의 숫자를 matrix에 이렇게 쭉 넣는데, nrow는 number of row입니다. 즉 행의 수, 그다음에 ncol은 number of column, 열의 수. 그래서 행의 수와 열의 수를 지정해주면 그것에 맞춰서 matrix가 만들어집니다. matrix라고 하는 함수를 실행하면 z라고 하는 matrix가 만들어지는데, 이와 같이 열 방향으로 1, 2, 3, 4, 5, 6, 7, 8, 이렇게까지 20가지가 행, 열로 나누어져서 저장이 된 것을 확인할 수가 있습니다. 보통 이런 식으로 matrix를 프로그램 안에서 코드로 만드는 경우는 잘 없습니다. 대개는 파일에 저장되어있는 것을 불러와서 matrix로 저장하는 경우가 대부분입니다.



매트릭스3


이번에는 matrix를 만듭니다. 뒤에 byrow=T, 이것만 하나 더 매개변수가 붙어 있습니다. byrow는 row니까 행입니다. 행 방향, 이런 뜻입니다. 그래서 byrow=T면 행 방향으로, 1, 2, 3, 4가 행 방향으로 먼저 들어갑니다. 행 방향, 그다음에 들어가는 것이 byrow=T의 의미가 되겠습니다.



matrix 결합

매트릭스3


기존에 vector, 여러 개의 vector가 있습니다. 연결해서 또 새로운 행렬을 만들 수도 있습니다. 보면 x가 1에서 4까지, y가 5에서 8까지, 그래서 1, 2, 3, 4, 5, 6, 7, 8, 이렇게 되어있는 x와 y라고 하는 2개의 vector입니다. 1차원 배열인데, 이것을 갖다 x와 y를 묶습니다. bind라고 하는 명령어로 묶는데, cbind 그러면 x와 y를 c니까 column입니다. 즉 열 방향으로 묶는 것입니다. 그래서 2개가 이렇게 세로로 이렇게, 이렇게 해서 2개를 묶는 방법이 있습니다.


그다음에 bind인데, rbind 그러면row bind 그래서 행 방향으로 묶는 것입니다. m1, m2를 보면 x와 y라고 하는 2개의 vector가 이렇게 열 방향 혹은 행 방향으로 만들어진 것을 알 수 있습니다. 이런 식으로 vector 몇 개를 묶어서 2차원 matrix를 만들기도 합니다.



매트릭스4


m2가 이미 matrix지요. 그 matrix하고 x라고 하는 vector, matrix와 vector를 묶어서도 또 다른 matrix를 만드는 그런 방법을 보여주고 있습니다. 마찬가지로 rbind, cbind 다 적용이 됩니다. 어떤 2차원 matrix가 있는데, 이쪽에 column을 더 붙일 수도 있습니다. 아니면 행들을 더 붙일 수도 있고, 다양한 방법으로 이 matrix 옆에 붙였다, 떼었다 할 수 있습니다.



matrix 안에서 위치 지정

매트릭스5


우리가 vector 안에서 vector도 여러 개의 데이터가 쭉 일렬로 들어가는 것입니다. 그러면 그중에서 내가 원하는 것을 콕 집어서 뽑아내거나 이런 것들이 가능했습니다. 꺽쇠 안에 인덱스를 썼습니다. matrix 2차원 형태로 되어있는 것에서도 뭔가를 집어서 꺼낼 수 있는 방법이 있어야 됩니다. 그래서 나온 것이 이 코드인데, 보시면 그냥 vector에서 데이터를 뽑아내는 것하고 거의 유사하다는 것을 알 수 있습니다. 다만 z라고 하는 것이 matrix인데, z하고 꺽쇠 안에 [2, 3] 이렇게 되어있습니다. 2가 행이고 3이 열의 번호입니다. z[2, 3] 그러면 z라고 하는 matrix의 두 번째 행, 그다음에 세 번째 열입니다. 이렇게 찾아가면 그 위치에 있는 것이 바로 이 데이터가 지칭하는 그 데이터가 되겠습니다.


그리고 z[1, 4] 그러면 첫 번째 행, 네 번째 열 이런 의미가 됩니다. 그리고 세 번째 이 코드 z하고 [2 ,] 이렇게만 하고 열을 지칭해야 하는데 열이 없습니다. 2행에 있는 모든 값을 다 뽑아내는 것입니다. 그래서 [2 ,] 그러면 두 번째 행에 있는 모든 값을 잘라냅니다. 그러면 동일한 원리로 z하고 [, 4] 그러면 네 번째 열입니다. 네 번째 열에 있는 모든 값을 잘라냅니다. 세로로 잘라내는 그런 명령이 되겠습니다.



행과 열에 이름 붙이기

매트릭스6


이번에는 vector에도 각각에 들어있는 원소에 이름을 붙일 수 있습니다. 마찬가지로 matrix에도 각각의 column의 이름과 행의 번호, 행의 이름을 붙일 수가 있습니다. 일단 명령어는 rownames와 colnames, 그러니까 행의 이름, 열의 이름 이런 뜻이겠지요. 그래서 최종적인 결과는 보이는 것처럼 행의 이름과 열의 이름이 붙게 됩니다.



행, 열 이름으로 데이터 접근하기

매트릭스7


이런 식으로 이름을 붙이면 뭘 할 수 있을까요? 이렇게도 되지만, 행의 이름이 무엇이고 열의 이름이 무엇인지를 가져오는 것도 가능합니다. z 콤마하고서 열의 숫자를 적을 곳에 col3 그러면 무슨 뜻일까요? col3이라는 이름이 붙은 column을 쫙 잘라낸 것입니다. 이와 유사하게 row2 콤마하고 비었습니다. row2라는 이름이 붙은 행, 행을 이 방향으로 자르는 것이 됩니다.

반응형