HOWTO · R
R 벡터에서 요소의 인덱스 찾기
이 튜토리얼은 R 벡터에서 요소의 인덱스를 찾는 방법을 보여줍니다.
이 페이지의 내용
조건이 참인 모든 위치를 찾으려면 which()를 사용하고, 요청한 각 값의 첫 위치를 찾으려면 match()를 사용하세요. 일치하는 값이 없으면 match()는 해당 값에 대해 NA를 반환합니다. R 벡터의 위치는 1부터 시작합니다. 아래 예제에서는 하나의 벡터로 두 함수의 결과를 비교합니다.
which()로 일치하는 모든 위치 찾기
which()는 논리형 벡터를 받아 TRUE인 요소의 위치를 반환합니다. 벡터를 하나의 값과 비교할 때 그 값이 여러 번 나오면 일치하는 위치도 여러 개 반환될 수 있습니다. 여러 값 중 하나라도 찾으려면 %in%으로 논리형 멤버십 벡터를 만든 뒤, 이를 which()에 전달하세요.
다음 예제는 20이 나오는 모든 위치를 찾고, 이어서 10 또는 30이 있는 위치를 찾습니다. 코드와 출력은 영어 그대로 표시됩니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
x <- c(10, 20, 10, 30, 20)
which(x == 20)
which(x %in% c(10, 30))
[1] 2 5
[1] 1 3 4
첫 번째 결과에는 20이 나오는 두 위치가 모두 포함되고, 두 번째 결과에는 값이 10 또는 30인 위치가 나열됩니다. 이 위치는 모든 R 벡터 인덱싱과 마찬가지로 1부터 시작합니다.
%in%은 왼쪽 벡터의 각 요소에 대해 논리값 하나씩을 반환하는 연산자이며, which()의 인수가 아닙니다. x > 15와 같은 조건으로 검색할 수도 있습니다. 이 논리식을 만들거나 그대로 which()에 전달하면 조건을 만족하는 위치를 얻습니다. which()는 TRUE에 해당하는 위치만 보고하므로, 결측 논리값은 결과에 포함되지 않습니다.
match()로 각 값의 첫 일치 위치 찾기
match(needles, haystack)을 사용하면 needles의 각 값에 대해 haystack에서 처음 일치하는 위치를 찾을 수 있습니다. 인수 순서가 중요합니다. 찾으려는 값들을 먼저 쓰고, 검색할 벡터를 두 번째로 씁니다. 검색 대상 벡터에 같은 값이 반복되어 있어도 위치가 반복해서 반환되지는 않습니다. 요청한 각 값에 대해 결과는 최대 하나입니다. 요청한 값이 없으면 match()는 기본적으로 NA를 반환합니다.
앞 절의 x 벡터를 사용하면 다음 식은 20과 30이 처음 나오는 위치를 찾고, 40은 일치 항목이 없다고 표시합니다. 코드와 출력은 영어 그대로 표시됩니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
x <- c(10, 20, 10, 30, 20)
match(c(20, 30, 40), x)
[1] 2 4 NA
결과는 20, 30, 40 순서에 대응합니다. 20은 위치 2에 처음 나오고, 30은 위치 4에 처음 나오며, 40은 없으므로 결과가 NA입니다.
필요한 결과에 따라 함수를 선택하세요. which(x == value)는 일치하는 모든 위치를 반환할 수 있지만, match(value, x)는 첫 위치만 반환합니다. 여러 값을 찾을 때 which(x %in% values)는 검색 대상 벡터에서 해당 값들이 있는 위치를 반환합니다. 반면 match(values, x)는 values의 순서를 유지하며 요청한 값마다 첫 일치 위치 하나를 반환합니다. 두 함수 모두 벡터를 변경하지 않습니다. 반환된 위치로 다른 벡터를 부분 집합으로 만들 때는 일치하지 않는 match() 결과가 NA라는 점에 유의하세요. 일치 항목이 없는 값을 건너뛰어야 한다면 위치를 사용하기 전에 !is.na(position)으로 확인하세요. 반환된 위치는 검색 대상 벡터를 기준으로 하므로, 관련 데이터에 적용할 때는 그 벡터의 순서도 고려해야 합니다.