programing

벡터에서 요소의 인덱스를 찾는 R 함수가 있습니까?

magicmemo 2023. 6. 5. 23:49
반응형

벡터에서 요소의 인덱스를 찾는 R 함수가 있습니까?

R에서, 나는 요소를 가지고 있습니다.x벡터v다음에서 요소의 첫 번째 인덱스를 찾습니다.v그것과 맞먹는x이를 위한 한 가지 방법은 다음과 같습니다.which(x == v)[[1]]하지만 그건 너무 비효율적으로 보입니다.더 직접적인 방법이 있습니까?

보너스 포인트의 경우, 다음과 같은 경우에 작동하는 함수가 있습니까?x벡터입니까?즉, 각 요소의 위치를 나타내는 지수 벡터를 반환해야 합니다.xv.

함수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만약 그 값이 두 번째 인수에서 발견될 수 있다면 그리고 a.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]]

예, 다음과 같이 벡터에서 요소의 인덱스를 찾을 수 있습니다.

> a <- c(3, 2, -7, -3, 5, 2)
> b <- (a==-7)  # this will output a TRUE/FALSE vector
> c <- which(a==-7) # this will give you numerical value
> a
[1]  3  2 -7 -3  5  2
> b
[1] FALSE FALSE  TRUE FALSE FALSE FALSE
> c
[1] 3

이것은 벡터에서 요소의 인덱스를 찾는 가장 효율적인 방법 중 하나입니다.

언급URL : https://stackoverflow.com/questions/5577727/is-there-an-r-function-for-finding-the-index-of-an-element-in-a-vector

반응형