5.10 벡터 요소에 접근하기

벡터 인덱싱(indexing)을 사용하여 벡터의 요소에 접근하여 그 요소 값을 확인할 수 있습니다. 인덱싱에 사용되는 벡터는 논리형, 정수형 또는 문자형 벡터 등이 사용됩니다.

5.10.1 정수형 벡터를 인덱스로 사용하기

벡터의 색인번호는 곧 인덱스는 요소가 벡터 내에 위치하는 번호입니다. R에서는 이 인덱스가 0이 아닌 1부터 시작합니다. 그리고 이러한 색인 번호를 정수형 벡터로 생성한 다음, 벡터 요소의 접근을 위한 인덱스로 사용할 수 있습니다. 이때 인덱스를 사용하기 위해서는 벡터변수명[인덱스 벡터]와 같이 변수명 다음의 대괄호([])안에 인덱스 벡터를 기입합니다.

x <- c(1, 2, 3, 4, 5)           # 데이터
x[2]                            # 벡터 x의 2번째 요소 값을 출력합니다.
## [1] 2
x[c(1, 3, 5)]                   # 벡터 x의 1, 3, 5번째 요소 값을 출력합니다.
## [1] 1 3 5
x[-1]                           # 1번째 요소를 제외한 요소 값을 확인합니다.
## [1] 2 3 4 5
# 음수의 사용
x[c(-1, -3)]                    # 1번째, 3번째 요소를 제외한 요소 값을 확인합니다. 
## [1] 2 4 5
# 음수와 양수의 사용 : Error
x[c(-1, 3)]                     # 음수와 양수를 동시에 사용하면 Error가 발생합니다.
## Error in x[c(-1, 3)]: only 0's may be mixed with negative subscripts

5.10.1.1 which() 함수의 이용

which() 함수를 이용하면 벡터에서 원하는 조건을 만족하는 요소의 색인번호를 찾을 수 있습니다. 원하는 조건을 which() 함수의 인수로 입력하면, which() 함수는 이 조건을 만족하는 벡터의 색인 번호를 반환해 줍니다.

다음의 벡터 x의 원소 중에서 2보다 큰 값을 가지는 요소의 색인번호를 반환합니다.

x <- c(6, 2, -3, 1, 5)        # 데이터

z <- which(x > 2)            # 벡터 x에서 2보다 큰 요소의 색인번호를 반환합니다.
                             # 결과로 z는 (1, 5)가 됩니다. 즉 조건을 만족하는 요소가 1, 5번째 요소입니다.
x[z]                         # 조건을 만족하는 요소의 값을 확인해 줍니다. 즉, 6, 5 입니다.
## [1] 6 5

5.10.2 논리형 벡터를 인덱스로 사용하기

인덱싱에 논리 벡터를 사용하면 논리 벡터가 TRUE 인 위치의 요소만 반환됩니다. 이 유용한 기능은 아래와 같이 벡터 필터링에 매우 유용하게 사용됩니다.

다음과 같이 x 벡터가 있을 때, 그 값이 2보다 큰 요소만 확인하고자 한다면 다음과 같이 할 수 있습니다. 즉, 인덱스로 값을 비교하는 조건식을 이용할 수 있습니다.

x <- c(6, 2, -3, 1, 5)
x[x > 2]
## [1] 6 5

이는 다음과 같이 값을 비교하는 비교식에 의해 논리형 벡터가 생성되고 이 논리형 벡터가 인덱싱에 사용되는 것입니다.

x <- c(6, 2, -3, 1, 5)      # 데이터
z <- x > 2                  # 데이터 요소들 각각이 2보다 큰지 비교 -> z 벡터는 논리형 벡터입니다.
                            # z <- c(TRUE, FALSE, FALSE, FALSE, TRUE)가 됩니다.
x[z]                        # 논리형 벡터 z가 인덱스로 사용되고 있으며, TRUE 인 요소만 반환이 됩니다.
## [1] 6 5

다음과 같이 x 벡터가 있을 때, 그 값이 24의 사이에 있는 요소만 확인하고자 할 때는 제2부 제1장에서 배운 논리연산자 &를 사용하면 됩니다.

x <- c(6, 2, -3, 1, 5)      # 데이터
x[x >=2 & x <=4]            
## [1] 2

이는 다음과 같은 단계를 거쳐 그 결과가 출력되는 것입니다.

x <- c(6, 2, -3, 1, 5)       # 데이터
z <- ( x >= 2 & x <= 4 )     # x의 요소 각각이 2와 4사이의 값이면 TRUE, 아니면 FALSE 값을 갖는 z
z                            # z <- c(FALSE, TRUE, TRUE, TRUE, FASLE)가 됩니다.
## [1] FALSE  TRUE FALSE FALSE FALSE
x[z]                         # z의 TRUE 요소에 해당하는 x 요소 값을 반환합니다.
## [1] 2

비교에 의한 확인은 다음의 원소 값의 수정에서도 유용하게 활용할 수 있습니다.**

5.10.3 문자형 벡터를 색인으로 사용하기

앞에서 우리는 벡터의 이름을 붙이는 방법에 대하여 살펴보았습니다. 이렇게 이름이 붙여진 벡터를 처리할 때 유용한 데, 벡터의 각 요소에 붙여진 이름을 이용하여 인덱싱할 수 있기 때문입니다.

x <- c(1, 3, 5, 7, 9)                # 데이터
names(x) <- LETTERS[1:5]             # 요소 이름 붙이기 : A, B, C, D, E 
x
## A B C D E 
## 1 3 5 7 9
x["A"]                               # "A" 이름을 갖는 요소값 출력
## A 
## 1
x[c("A", "C", "D")]                  # 문자형 벡터의 인덱스 : c("A", "C", "D")
## A C D 
## 1 5 7
x[-c("A", "C", "D")]                 # - 기호는 사용할 수 없습니다. ; Error
## Error in -c("A", "C", "D"): 단항연산자에 유효한 인자가 아닙니다