R/R

[R] 02. 인덱싱(indexing)

구름솜:D 2023. 11. 22. 17:08
728x90

인덱싱(indexing) = 색인이란 데이터의 일부분을 선택하는 작업을 말한다.

인덱싱(indexing) 은 [ ](대괄호)를 사용하여 데이터의 일부분을 선택할 수 있다.

각 자료구조마다 인덱싱(indexing)을 하는 방법이 다르다.

다른 언어와 달리 R은 인덱싱(indexing)이 '1'부터 시작한다는 것에 주의해야한다.

  - Java, C, C++, Python은 인덱싱(indexing) '0'부터 시작

 

1. 벡터(vector)

- 벡터 인덱싱(indexing)은 다양한 방법으로 가능하다.

v1 <- c(1,2,3,4,5,6,7)
v1[2] 
v1[c(3:5)]
v1[c(3, 5, 6)]

> v1[2] 
[1] 2
> v1[c(3:5)]
[1] 3 4 5
> v1[c(3, 5, 6)]
[1] 3 5 6

 

2. 행렬(matrix)

- 행렬은 한가지 데이터 유형으로 구성된 2차원 구조의 데이터이기에 행과 열이 존재한다.

- 인덱싱(indexing)은 "행렬명[행,열]" 을 사용한다.

v1 <- c(1,2,3,4,5,6)    
m1<-matrix(v1, nrow=2, ncol=3)

> m1[1,3]    # m1행렬에서 1행2열의 구성요소
[1] 5
> m1[1,]     # m1행렬에서 1행의 구성요소
[1] 1 3 5
> m1[,3]     # m1행렬에서 3열의 구성요소
[1] 5 6

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

 

3. 배열(array)

- 배열은 한가지 데이터 유형으로 구성된 3차원 구조의 데이터이기에 행과 열,층이 존재한다.

- 인덱싱(indexing)은 "행렬명[행,열,층]" 을 사용한다.

v1 <- c(1,2,3,4,5,6)    
a1 <- array(v1, dim = c(2,2,3))

> a1[1,2,3]      # a1배열에서 3층에있는 1행2열의 구성요소
[1] 5
> a1[1,,]        # a1배열에서 모든 층의 1행의 구성요소
     [,1] [,2] [,3]
[1,]    1    5    3
[2,]    3    1    5
> a1[,1,]        # a1배열에서 모든 층의 1열의 구성요소
     [,1] [,2] [,3]
[1,]    1    5    3
[2,]    2    6    4
> a1[,,3]        # a1배열에서 3층의 구성요소
     [,1] [,2]
[1,]    3    5
[2,]    4    6

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

 

4. 리스트(list)

- 리스트는 key(층)별로 여러 데이터 유형이 포함된 1차원 구조의 데이터이기에 key(층)을 사용하여 인덱싱을 한다.

- 리스트 출력 시 겹대괄호[[]]를  key(층) 이라고 한다.

- 인덱싱(indexing)은  "겹대괄호[[key(층)]]" 을 사용한다.

list1 <- list('a',c('b','c'),1,2)  #key(층)을 명명하지 않은 경우

> list1[[3]]     #list1의 3층에 있는 요소 출력
[1] 1
> list1[[2]]     #list1의 2층에 있는 요소 출력
[1] "b" "c"
> list1[[2]][1]  #list1의 2층에 첫번째에 있는 요소 출력
[1] "b"
> list1[2]       #list1의 2층에 있는 요소를 리스트형태로 출력
[[1]]
[1] "b" "c"


# list1
# [[1]]
# [1] "a"
# 
# [[2]]
# [1] "b" "c"
# 
# [[3]]
# [1] 1
# 
# [[4]]
# [1] 2
list2 <- list(key1=c(1,2,3), key2=c('a','b','c','d'))  #key(층)을 명시한 경우

> list2[['key2']]      #list2의 'key2'에 있는 요소 출력
[1] "a" "b" "c" "d"
> list2[['key2']][3]   #list2의 'key2'에 있는 세번째 요소 출력
[1] "c"
> list2['key2']        #list2의 'key2'에 있는 요소를 리스트형태로 출력
$key2
[1] "a" "b" "c" "d"

# list2
# $key1
# [1] 1 2 3
# 
# $key2
# [1] "a" "b" "c" "d"

 

 

 5. 데이터프레임(data frame)

- 데이터프레임은 컬럼별로 여러 데이터 유형으로 구성된 2차원 구조의 데이터이기에 행과 열이 존재한다.

- 인덱싱(indexing)은 " 데이터프레임명[행,열]" 을 사용한다.

- $를 사용할 수도 있다.

v1 <- c(1,2,3,4,5,6)    
v2 <- c('a','b','c','d','e','f')
v3 <- c('A','B','C','D','E','F')
v4 <- c('가','나','다','라','마','바')
df1 <- data.frame(v1,v2,v3,v4)

> df1[1,]         #df1에서 1행 출력
  v1 v2 v3 v4
1  1  a  A 가
> df1[,1]         #df1에서 1열 출력
[1] 1 2 3 4 5 6
> df1[,'v1']      #df1에서 'v1'칼럼 출력
[1] 1 2 3 4 5 6
> df1[1]          #df1에서 1열 출력
  v1
1  1
2  2
3  3
4  4
5  5
6  6
> df1$v1           #df1에서 'v1'칼럼 출력
[1] 1 2 3 4 5 6


# df1
#   v1 v2 v3 v4
# 1  1  a  A 가
# 2  2  b  B 나
# 3  3  c  C 다
# 4  4  d  D 라
# 5  5  e  E 마
# 6  6  f  F 바

 

'R > R' 카테고리의 다른 글

[R] 09. 조건문(ifelse/if문)  (0) 2023.12.05
[R] 08. 문자열관련함수(stringr)  (0) 2023.11.29
[R] 04. 함수(function)  (0) 2023.11.22
[R] 03. 형 변환(casting)  (0) 2023.11.22
[R] 01. R의 자료구조  (0) 2023.11.22