R 행렬(matrix)정의, 행과열의 이름 지정
행렬은 숫자를 행과 열에 배열한 것입니다. 행렬을 정의하는 방법은 두가지가 있습니다.
- matrix 함수 사용
- 벡터를 bind하여 정의
1. 행렬 정의 : matrix 함수 사용
먼저 matrix 함수를 사용하여 정의해봅시다. 아래는 R의 공식문서에서 제공하는 정의방법입니다.
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
dimnames = NULL)
옵션을 하나씩 알아봅시다!
data 자리에는 벡터를 입력합니다. 숫자벡터, 문자벡터 둘 다 올 수 있습니다. 문자벡터가 오는 경우에는 산술연산(+,-,*,% 등)이 불가능합니다.
벡터를 입력한 뒤에, 행의 수 혹은 열의 수를 정해줍니다. nrow가 행의 수, ncol이 열의 수 입니다. 예를들어 길이 6인 벡터를 입력하고, 행의 수를 2로 넣을 경우 2행 3열짜리 행렬이 됩니다.
> m1=matrix(c(1,2,3,4,5,6),nrow=2)
> m1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
nrow대신 ncol을 넣어도 됩니다.
> m1=matrix(c(1,2,3,4,5,6),ncol=3)
> m1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
byrow 옵션은 뭘까요? 위에 벡터가 행렬로 바뀌는방식을 보면 1,2,3,4,5,6의 순서가 아래방향으로 배치하고 있는 것을 알 수 있습니다. '열 방향'인 것입니다. byrow는 행렬을 만들 때, 데이터가 배치되는 방향을 결정합니다. byrow=FALSE가 디폴트이기 때문에, 행방향으로 나열하지 '않는다' 즉, 열방향으로 나열한다가 디폴트인 것입니다. byrow=TRUE로 바꿔봅시다.
> m1=matrix(c(1,2,3,4,5,6),ncol=3,byrow=TRUE)
> m1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
데이터 배치 방향이 오른쪽방향(행방향)으로 바뀐 것을 알 수 있습니다.
마지막옵션은 dinames입니다. 행과 열의 이름을 입력합니다. 리스트를 이용하여 입력합니다.
> m1=matrix(c(1,2,3,4,5,6),ncol=3,byrow=TRUE,dimnames=list(c("row1","row2"),c("col2","col2","col3")))
> m1
col2 col2 col3
row1 1 2 3
row2 4 5 6
2. 행렬 정의 : bind 함수 사용
bind는 묶는다는 의미입니다. 벡터를 이어붙여서 행렬을 만드는 방식입니다. 열방향으로 이어붙이는 cbind와, 행방향으로 이어 붙이는 rbind가 있습니다.
벡터 둘을 정의하고 cbind로 묶은 경우와 rbind로 묶은경우를 각각 m1, m2에 입력합시다.
v1=c(1,2,3,4,5)
v2=c(10,20,30,40,50)
m1=cbind(v1,v2)
m2=rbind(v1,v2)
결과는 아래와 같습니다. r에서의 벡터는 행벡터도 아니고 열벡터도 아니기 때문에 상황에 따라 행벡터역할도 하고 열벡터 역할도 합니다.
> m1
v1 v2
[1,] 1 10
[2,] 2 20
[3,] 3 30
[4,] 4 40
[5,] 5 50
> m2
[,1] [,2] [,3] [,4] [,5]
v1 1 2 3 4 5
v2 10 20 30 40 50
3. 행과 열의 이름지정
행렬의 행과열의 이름을 입력하는 방법은 두가지가 있습니다. 먼저 dimnames를 사용하는 방법입니다.
> m=matrix(c(1,2,3,4,5,6),nrow=2)
> m
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
dimnames 함수 안에 행렬이름을 넣고, 리스트형태로 이름을 입력합니다.
> dimnames(m)=list(c("r1","r2"),c("c1","c2","c3"))
> m
c1 c2 c3
r1 1 3 5
r2 2 4 6
다른 방법은 rownames와 colnames 함수를 사용하는 방법입니다. 행과 열을 각각 따로 입력합니다. 행렬을 하나 정의합시다.
> m2=matrix(c(1,2,3,4,5,6),nrow=2)
> m2
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
아래와 같이 입력합니다. rownames가 행이름, colnames가 열이름입니다.
> rownames(m2)=c("c1","c2")
> colnames(m2)= c("r1","r2","r3")
> m2
r1 r2 r3
c1 1 3 5
c2 2 4 6
4. 자료구조 확인
자료 구조를 확인하는 함수는 class, typeof, mode가 있습니다. 행렬인지 여부를 확인하는 함수는 as.matrix입니다.
> m=matrix(c(1,2,3,4,5,6),nrow=2)
> class(m)
[1] "matrix"
> mode(m)
[1] "numeric"
> str(m)
num [1:3, 1] 1 2 3
> typeof(m)
[1] "double"
> is.matrix(m)
[1] TRUE
'5. 자료구조 > 2) 행렬 | matrix()' 카테고리의 다른 글
[R 코딩] 전치행렬 구하는 함수 (t) (0) | 2020.12.18 |
---|---|
[R 코딩] 역행렬 구하는 함수 (solve) (0) | 2020.12.18 |
[R 코딩] 모든 원소가 0인 행렬 만들기 (0) | 2020.12.18 |
[R 코딩] matrix 함수 없이 벡터에서 행렬만들기 (0) | 2020.12.15 |
R 행렬 인덱싱, 원소 추가/수정/제거 (0) | 2020.01.30 |
댓글