[r] 벡터에서 요소의 인덱스를 찾기위한 R 함수가 있습니까?

R에는 요소 x와 벡터가 v있습니다. 나는에 요소의 첫 번째 인덱스를 찾으려면 v그와 같다 x. 이 작업을 수행하는 한 가지 방법은 다음 which(x == v)[[1]]과 같습니다 . , 그러나 그것은 너무 비효율적입니다. 더 직접적인 방법이 있습니까?

보너스 포인트의 경우 x벡터 인 경우 작동하는 함수가 있습니까? 즉, 그것은 각각의 요소의 위치를 나타내는 지표 벡터 돌려 x하여 v.



답변

이 함수 match는 벡터에서 작동합니다.

x <- sample(1:10)
x
# [1]  4  5  9  3  8  1  6 10  7  2
match(c(4,8),x)
# [1] 1 5

match요청한대로 첫 번째 일치 항목 만 반환합니다. 첫 번째 인수 값의 두 번째 인수 위치를 리턴합니다.

여러 개의 일치 %in%하는 방법은 다음과 같습니다.

x <- sample(1:4,10,replace=TRUE)
x
# [1] 3 4 3 3 2 3 1 1 2 2
which(x %in% c(2,4))
# [1]  2  5  9 10

%in%첫 번째 인수만큼 논리 벡터를 반환하며 TRUE, 두 번째 인수에서 if 값을 찾을 수 있고 FALSE그렇지 않은 경우 값을 반환합니다.


답변

Positionfunprog {base} 의 함수 도 작업을 수행합니다. 임의의 함수를 전달하고 첫 번째 또는 마지막 일치를 반환합니다.

Position(f, x, right = FALSE, nomatch = NA_integer)


답변

위에서 언급 한 방법의 효율성에 대한 작은 참고 사항 :

 library(microbenchmark)

  microbenchmark(
    which("Feb" == month.abb)[[1]],
    which(month.abb %in% "Feb"))

  Unit: nanoseconds
   min     lq    mean median     uq  max neval
   891  979.0 1098.00   1031 1135.5 3693   100
   1052 1175.5 1339.74   1235 1390.0 7399  100

가장 좋은 것은

    which("Feb" == month.abb)[[1]]


답변

R은 ==벡터 건초 더미에서 바늘의 인덱스를 찾는 방법으로 double equals 연산자를 오버로드했습니다 . 건초 더미의 각 일치 값을 logical포함 하는 벡터를 생성합니다 TRUE.

예:

haystack <- c(1, 2, 4, 3, 4)
needle <- 4
indices <- needle == haystack
indices
[1] 3  5
haystack[indices]
[1] 4  4

둘 다 벡터 인 경우 작동하며 여러 벡터를 사용하도록 확장 할 수도 있습니다.


답변