Development Tip

벡터에서 가장 작은 값의 인덱스를 반환합니까?

yourdevel 2020. 11. 27. 21:32
반응형

벡터에서 가장 작은 값의 인덱스를 반환합니까?


a <- c(1, 2, 0, 3, 7)

가장 작은 값인 3의 인덱스를 반환하는 함수를 찾고 있습니다. 무엇입니까?


당신은 찾고 있습니다 which.min():

a <- c(1,2,0,3,7,0,0,0)
which.min(a)
# [1] 3

which(a == min(a))
# [1] 3 6 7 8

(위에서 볼 수 있듯이 최소값에 대해 여러 요소가 연결되어있는 which.min()경우 첫 번째 요소 의 인덱스 만 반환됩니다. 대신 최소값과 일치하는 모든 요소의 인덱스를 원하는 경우 두 번째 구문을 사용할 수 있습니다.)


Josh의 대답에 대한 대안으로

a <- c(1, 2, 0, 3, 7)
which(a == min(a))

이는 최소값과 동일한 모든 인덱스를 제공합니다. 따라서 가장 낮은 값과 일치하는 값이 두 개 이상 있으면

a <- c(1, 2, 0, 3, 7, 0)
which(a == min(a))  # returns both 3 and 6
which.min(a)        # returns just 3

편집 : 찾고있는 것이 최소 요소와 동일한 경우 (주석 중 하나에서 암시했듯이) 대신 다음을 수행 할 수 있습니다.

a <- c(1, 2, 0, 3, 7, 0)
sum(a == min(a))

효율성을 좋아한다면 Rfast 패키지 min_max 함수 를 index = True로 사용할 수 있습니다.

지금까지 사용하지 않았던 것보다 빠르게 최소값과 최대 값의 인덱스를 동시에 반환합니다.

a = runif(10000)
Rfast::min_max(a,index=T)

# min  max 
# 2984 2885

which(a == min(a))

#[1] 2984

a = runif(1000000)
microbenchmark::microbenchmark(
    min_max = Rfast::min_max(a,index=T),
    which1 = which(a == min(a)),
    which2 = which.min(a)
)

Unit: milliseconds
   expr      min         lq        mean     median         uq        max neval
min_max 1.889293  1.9123860  2.08242647  1.9271395  2.0359730   3.527565   100
 which1 9.809527 10.0342505 13.16711078 10.3671640 14.7839955 111.424664   100
 which2 2.400745  2.4216995  2.66374110  2.4471435  2.5985265   4.259249   100

참고 URL : https://stackoverflow.com/questions/9390749/return-index-of-the-smallest-value-in-a-vector

반응형