반응형
벡터에서 가장 작은 값의 인덱스를 반환합니까?
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
반응형
'Development Tip' 카테고리의 다른 글
Android의 날짜 및 시간 변경 리스너? (0) | 2020.11.27 |
---|---|
SQL Server : Null VS 빈 문자열 (0) | 2020.11.27 |
2 개의 JVM이 서로 통신하도록하는 방법 (0) | 2020.11.27 |
TypeError : 'int'개체를 암시 적으로 str로 변환 할 수 없습니다. (0) | 2020.11.27 |
IntelliJ, 간단한 웹 응용 프로그램을 시작할 수 없음 : localhost : 1099에서 서버를 ping 할 수 없음 (0) | 2020.11.27 |