R의 배열에 대해서 알아보겠다.
배열은 열과 행으로 구성된 데이터이다. 이 때 배열은 행렬과 다른 점이 있다. 바로 차원을 지정할 수 있다는 점이다.
R에서 배열의 생성하는 함수는 array 함수이다.
x <- array(1:5, c(2, 4)) # 1~5 값을 2X4 행렬에 할당
x
'''
[,1] [,2] [,3] [,4]
[1,] 1 3 5 2
[2,] 2 4 1 3
'''
x[1, ] # 1행 요소 값 출력
# [1] 1 3 5 2
x[, 2] # 2열 요소 값 출력
[1] 3 4
array( values , c(row,columns,dimension)) 이라고 이해하면 된다. array 인덱싱시에 순서는 x[row,col] 이다.
만약에 행과 열에 이름을 지정하고 싶으면 array 안에 dimnames 파라미터를 지정해주면 된다.
dimnamex = list(c("1st", "2nd"), c("1st", "2nd", "3rd", "4th")) # 행 열 이름
x <- array(1:5, c(2, 4,3), dimnames = dimnamex) # 3차원
x
'''
, , 1
1st 2nd 3rd 4th
1st 1 3 5 2
2nd 2 4 1 3
, , 2
1st 2nd 3rd 4th
1st 4 1 3 5
2nd 5 2 4 1
, , 3
1st 2nd 3rd 4th
1st 2 4 1 3
2nd 3 5 2 4
'''
x["1st", ] # error
x[, "4th"] # error
이번에는 3차원으로 지정해주었다. 값을 넣어주는 것은 1부터 5까지 순서대로 들어가고 만약 그 이상을 넘어가게 된다면 처음으로 돌아가 다시 지정해준다. 매우 유동적임을 알 수 있다.
그리고 인덱싱을 할 때는 3차원이기 때문에 차원을 지정해줘야한다. 즉 첫번째 차원에 1행 전체를 불러오고 싶다면 x['1st', ,1] 로 불러올 수 있다.
다음으로 배열과 비슷한 행렬에 대해 알아보겠다.
행렬은 차원이 1차원인 배열이라고 생각하면 된다. 이를 R로 표현해보자(matrix 함수 이용)
x <- 1:12
x
matrix(x, nrow = 3)
'''
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
'''
matrix(x, nrow = 3, byrow = T) #행우선
'''
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
'''
1부터 12의 값을 nrow=3 이라는 파라미터 즉 행 수가 3인 행렬을 생성하는 것이다. 만약 열 수로 지정하고 싶다면 ncols=3 이라고 지정해주면 된다.
만약 byrow = T라는 파라미터를 지정하면 행 우선으로 값이 입력되어지는 것이다. 만약 이를 설정하지 않는다면 default값은 byrow=False로 지정되어 열 우선으로 값이 입력된다.
이 행렬(1차원 배열)을 벡터로는 생성할 수 있는 방법에 대해 설명하겠다.
v1 <- c(1, 2, 3, 4)
v2 <- c(5, 6, 7, 8)
v3 <- c(9, 10, 11, 12)
cbind(v1, v2, v3) # 열 단위로 묶어 배열 생성
'''
v1 v2 v3
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
'''
rbind(v1, v2, v3) # 행 단위로 묶어 배열 생성
'''
[,1] [,2] [,3] [,4]
v1 1 2 3 4
v2 5 6 7 8
v3 9 10 11 12
'''
길이가 같은 벡터를 생성하고 cbind() 로 생성하면 열 단위로 묶어서 배열을 생성(4,3)하고 열 단위로 값이 입력된다. rbind()를 이용하면 행 단위로 묶어서 배열을 생성하고(3,4) 행 단위로 값이 입력된다.
댓글