5.10 벡터 요소에 접근하기
벡터 인덱싱(indexing)을 사용하여 벡터의 요소에 접근하여 그 요소 값을 확인할 수 있습니다. 인덱싱에 사용되는 벡터는 논리형, 정수형 또는 문자형 벡터 등이 사용됩니다.
5.10.1 정수형 벡터를 인덱스로 사용하기
벡터의 색인번호는 곧 인덱스는 요소가 벡터 내에 위치하는 번호입니다. R에서는 이 인덱스가 0이 아닌 1부터 시작합니다. 그리고 이러한 색인 번호를 정수형 벡터로 생성한 다음, 벡터 요소의 접근을 위한 인덱스로 사용할 수 있습니다. 이때 인덱스를 사용하기 위해서는 벡터변수명[인덱스 벡터]
와 같이 변수명 다음의 대괄호([]
)안에 인덱스 벡터를 기입합니다.
<- c(1, 2, 3, 4, 5) # 데이터
x 2] # 벡터 x의 2번째 요소 값을 출력합니다. x[
## [1] 2
c(1, 3, 5)] # 벡터 x의 1, 3, 5번째 요소 값을 출력합니다. x[
## [1] 1 3 5
-1] # 1번째 요소를 제외한 요소 값을 확인합니다. x[
## [1] 2 3 4 5
# 음수의 사용
c(-1, -3)] # 1번째, 3번째 요소를 제외한 요소 값을 확인합니다. x[
## [1] 2 4 5
# 음수와 양수의 사용 : Error
c(-1, 3)] # 음수와 양수를 동시에 사용하면 Error가 발생합니다. x[
## 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보다 큰 값을 가지는 요소의 색인번호를 반환합니다.
<- c(6, 2, -3, 1, 5) # 데이터
x
<- which(x > 2) # 벡터 x에서 2보다 큰 요소의 색인번호를 반환합니다.
z # 결과로 z는 (1, 5)가 됩니다. 즉 조건을 만족하는 요소가 1, 5번째 요소입니다.
# 조건을 만족하는 요소의 값을 확인해 줍니다. 즉, 6, 5 입니다. x[z]
## [1] 6 5
5.10.2 논리형 벡터를 인덱스로 사용하기
인덱싱에 논리 벡터를 사용하면 논리 벡터가 TRUE
인 위치의 요소만 반환됩니다. 이 유용한 기능은 아래와 같이 벡터 필터링에 매우 유용하게 사용됩니다.
다음과 같이 x 벡터가 있을 때, 그 값이 2보다 큰 요소만 확인하고자 한다면 다음과 같이 할 수 있습니다. 즉, 인덱스로 값을 비교하는 조건식을 이용할 수 있습니다.
<- c(6, 2, -3, 1, 5)
x > 2] x[x
## [1] 6 5
이는 다음과 같이 값을 비교하는 비교식에 의해 논리형 벡터가 생성되고 이 논리형 벡터가 인덱싱에 사용되는 것입니다.
<- c(6, 2, -3, 1, 5) # 데이터
x <- x > 2 # 데이터 요소들 각각이 2보다 큰지 비교 -> z 벡터는 논리형 벡터입니다.
z # z <- c(TRUE, FALSE, FALSE, FALSE, TRUE)가 됩니다.
# 논리형 벡터 z가 인덱스로 사용되고 있으며, TRUE 인 요소만 반환이 됩니다. x[z]
## [1] 6 5
다음과 같이 x
벡터가 있을 때, 그 값이 2
와 4
의 사이에 있는 요소만 확인하고자 할 때는 제2부 제1장에서 배운 논리연산자 &
를 사용하면 됩니다.
<- c(6, 2, -3, 1, 5) # 데이터
x >=2 & x <=4] x[x
## [1] 2
이는 다음과 같은 단계를 거쳐 그 결과가 출력되는 것입니다.
<- c(6, 2, -3, 1, 5) # 데이터
x <- ( x >= 2 & x <= 4 ) # x의 요소 각각이 2와 4사이의 값이면 TRUE, 아니면 FALSE 값을 갖는 z
z # z <- c(FALSE, TRUE, TRUE, TRUE, FASLE)가 됩니다. z
## [1] FALSE TRUE FALSE FALSE FALSE
# z의 TRUE 요소에 해당하는 x 요소 값을 반환합니다. x[z]
## [1] 2
이 비교에 의한 확인
은 다음의 원소 값의 수정
에서도 유용하게 활용할 수 있습니다.**
5.10.3 문자형 벡터를 색인으로 사용하기
앞에서 우리는 벡터의 이름을 붙이는 방법에 대하여 살펴보았습니다. 이렇게 이름이 붙여진 벡터를 처리할 때 유용한 데, 벡터의 각 요소에 붙여진 이름을 이용하여 인덱싱할 수 있기 때문입니다.
<- c(1, 3, 5, 7, 9) # 데이터
x names(x) <- LETTERS[1:5] # 요소 이름 붙이기 : A, B, C, D, E
x
## A B C D E
## 1 3 5 7 9
"A"] # "A" 이름을 갖는 요소값 출력 x[
## A
## 1
c("A", "C", "D")] # 문자형 벡터의 인덱스 : c("A", "C", "D") x[
## A C D
## 1 5 7
-c("A", "C", "D")] # - 기호는 사용할 수 없습니다. ; Error x[
## Error in -c("A", "C", "D"): 단항연산자에 유효한 인자가 아닙니다