R에서 which함수는 데이터의 인덱스를 반환하는 기능을 합니다. which함수는 다음과 같은 형태로 쓸 수 있습니다.
인자로 논리형 벡터(TRUE 또는 FALSE로 구성된 벡터)를 주고 TRUE인 데이터에 대해 인덱스를 결과값으로 반환합니다.
예1) which 함수는 아래 그림과 같이 TRUE인 데이터에 대한 순서 번호를 반환합니다.
> test <- c(TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE) > test [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE # TRUE가 있는 순서를 반환 > which(test) [1] 1 2 5 6 |
예2)
어떤 데이터를 2로 나누었을 때 짝수이면 TRUE, 홀수이면 FALSE를 반환하는 논리형태의 벡터를 구성해봅시다. 아래 예제는 1부터 10까지 2로 나누었을 때의 논리형태의 벡터를 구성하는 것입니다. 짝수가 TRUE 형태로 반환되기 위해서는 2로 나누었을 때 나머지가 0이어야 합니다. R에서 나머지를 구하는 연산자는 %%를 씁니다.
# 1부터 10까지 수를 2로 나누었을 때 나머지가 0이 되도록 함 # 짝수이면 TRUE, 홀수이면 FALSE 가 나옴 > 1:10 %% 2 ==0 [1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE # 짝수인 순서 반환(두번째 네번째 여섯번째 여덟번째 열번째 자리에 짝수가 있음) > which(1:10 %%2 ==0) [1] 2 4 6 8 10 |
예3)
위 예제의 연장선상으로 다른 예제를 살펴보겠습니다.
c(2, 12, 4, 5, 6, 7, -11) 로 구성된 숫자벡터에서 3보다 큰 수에 대한 인덱스를 반환해봅시다. 아래 그림은 데이터에 3보다 큰 값을 가지고 있는 값에 대해 인덱스를 반환하고 있습니다.
# 3보다 큰 값에 대한 인덱스 반환 > test3 <- c(2,12,4,1,5,7,-11) > test3 > 3 [1] FALSE TRUE TRUE FALSE TRUE TRUE FALSE > which(test3>3) [1] 2 3 5 6 |
즉, which함수란 조건을 만족하는 데이터가 있는 위치에 대한 정보를 나타냅니다. 값의 위치가 바뀌면 당연히 인덱스도 달라지며 which함수의 결과값도 달라집니다! 따라서 값의 순서가 어떻게 되어있는 지에 따라 which함수의 결과도 충분히 달라질 수 있다는 뜻입니다
예4)
iris 데이터에 which함수를 응용하여 Sepal.Length 변수가 7보다 큰 값을 추출하는 방법을 알아보도록 하겠습니다.
코드 구성원리는 아래 순서와 같습니다.
① Sepal.Length 보다 큰 행에 대해 논리형태의 벡터를 구성
② 전 단계에서 구성한 논리형태의 벡터를 which 함수에 적용하여 인덱스를 반환
③ 인덱스를 이용하여 행을 추출
# ① Sepal.Length 보다 큰 행에 대한 논리형태의 벡터 구성 > iris$Sepal.Length > 7 [1] FALSE FALSE FALSE FALSE ...이하 생략 # ② 1번에서 구성한 논리벡터에서 TRUE가 위치해있는 순서를 반환 > which_test <- which(iris$Sepal.Length > 7) > which_test [1] 103 106 108 110 118 119 123 126 130 131 132 136 # ③ 2번에서 구성한 인덱스를 이용하여 iris데이터에서 조건을 만족하는 행을 추출 > iris[which_test,] |
which함수는 TRUE인 값의 순서번호를 반환한다고 이해하면 쉽습니다. 위 예제에서 보듯 which함수를 응용하면 다양한 상황에서 유용하게 쓸 수 있으니 실습해보기 바랍니다.
'데이터 분석 > R 데이터 처리 & 분석' 카테고리의 다른 글
[R] tidyr 패키지를 이용한 데이터 재구조(pivot_longer, pivot_wider) (0) | 2020.10.02 |
---|---|
[R] 쉼표(comma , )로 구분된 데이터 정제하기 (0) | 2020.09.30 |
[R데이터분석] R 특정 문자열을 포함한 변수 선택하기 (0) | 2020.07.12 |
[R데이터분석] 간단하게 변수 이름 변경하기 (0) | 2020.07.10 |
[R] sapply 함수 사용법 & 활용하기 (0) | 2020.07.09 |