본문 바로가기
R/Data Type

R 배열 Array - 생성/인덱싱

by 통계열등생 2020. 10. 16.
반응형

배열(array)은 동일한 자료형의 데이터를 저장하는 다차원의 자료구조이다.

벡터(vector)은 1차원의 배열구조, 행렬(matrix)도 2차원의 배열구조라고 할 수 있다.

 

 

 

 ◎ 배열 생성

 

  • array()
array(data = NA, dim = length(data), dimnames = NULL)

<인수설명>

dim 배열의 차원, 값을 지정하지 않으면 1차원의 배열을 생성
dimnames 각 차원의 이름을 지정

 

> arr1 = array(1:12, c(2,3,2), dimnames=list(c('a','b'),c('c','d','e'),c('f','g')))
> print(arr1)
, , f

  c d e
a 1 3 5
b 2 4 6

, , g

  c  d  e
a 7  9 11
b 8 10 12

> cat(arr1)
1 2 3 4 5 6 7 8 9 10 11 12

cat() 함수로 배열과 행렬을 출력하면 벡터처럼 출력된다.

 

> mat1 = rbind(c(1,2,3), c(4,5,6)); mat1
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> mat2 = rbind(c(10,100,1000), c(0,0,0)); mat2
     [,1] [,2] [,3]
[1,]   10  100 1000
[2,]    0    0    0
> arr2 = array(c(mat1,mat2), c(3,2,2))
> arr2  
, , 1

     [,1] [,2]
[1,]    1    5
[2,]    4    3
[3,]    2    6

, , 2

     [,1] [,2]
[1,]   10    0
[2,]    0 1000
[3,]  100    0

> c(mat1,mat2)
 [1]    1    4    2    5    3    6   10    0  100    0 1000    0

mat1과 mat2가 행렬이여도 c()함수는 벡터를 생성하는 함수임으로 c()로 묶으면 벡터로 출력된다.

mat1과 mat2을 하나의 배열로 만들고 싶다면 밑의 방법을 쓸 수도 있다.

 

> arr3 = array(0, c(2,3,2))
> arr3[,,1] = mat1
> arr3[,,2] = mat2
> arr3
, , 1

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

, , 2

     [,1] [,2] [,3]
[1,]   10  100 1000
[2,]    0    0    0

먼저 빈 배열을 만들어주는데 이때 차원은 알맞게 지정해주지않으면 오류가 발생한다.

[ , ,1] 같은 인덱싱 방법은 조금 더 밑에서 설명하겠다.

 

> arr4 = array(1:8, c(2,3,2))
> arr4
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    1    3
[2,]    8    2    4

> arr5 = array(1:12, c(2,2,2))
> arr5
, , 1

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

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

차원의 크기와 벡터의 수가 같지 않으면 벡터를 부족한만큼 반복해서 값을 가져다 쓰거나 벡터가 넘치면 차원에 맞춰 값을 자른다.

 

 

  • dim()
> arr6 = 1:10
> dim(arr6) = c(1,5,2)
> arr6
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5

, , 2

     [,1] [,2] [,3] [,4] [,5]
[1,]    6    7    8    9   10

 

 

 

 ◎ 배열 인덱싱(indexing)

 

  • 객체[행, 열, 면]
> arr = array(1:12, c(2,2,3)); arr
, , 1

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

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

, , 3

     [,1] [,2]
[1,]    9   11
[2,]   10   12

> dim(arr)
[1] 2 2 3
> arr[1,1,1]
[1] 1
> arr[1,2,1:3]
[1]  3  7 11
> arr[,,1]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

 

 

  • 조건식
> arr[arr %% 2 == 0]
[1]  2  4  6  8 10 12
> arr[arr >= 10]
[1] 10 11 12

조건식의 결과는 벡터로 출력된다.

 

 

  • 값 치환
> arr[,,1] = 0
> arr[arr >= 10] = -1
> arr
, , 1

     [,1] [,2]
[1,]    0    0
[2,]    0    0

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

, , 3

     [,1] [,2]
[1,]    9   -1
[2,]   -1   -1

 

 

 

 

 

<R 배열 Array - 생성/인덱싱>

반응형

댓글