2014-04-21 2 views
1

8 개의 요소가 포함 된 test라는 벡터가 있습니다.값이 0이 아닌 최소 및 최대 색인 찾기

테스트 벡터가 0이 될 수없는 테스트 벡터의 MAX와 MIN을 포함하는 점으로 불리는 벡터를 반환하고 싶습니다. 즉, 내가 0은 최소 또는 여기에 최대

되고 싶지 않아하는 것은

test<- c(1,8,2,3,4,5,0,7) 
test 

points <- c((1:length(test))[ (test == min(test, na.rm = TRUE) | test == max(test,  na.rm = TRUE) ) && test != 0 ]) 
points 

는 지금 되돌아 나는 점을 반환 할

integer(0) 

포인트 내 코드입니다

1 2 

은 최소값의 인덱스이고 2는 최대 값의 인덱스이기 때문에

고마워요!

답변

2

이 기능을 사용하면 원하는 것을 할 수 ...

minmax <- function(v){ 
    v.na <- v 
    v.na[v==0] <- NA 
    return(c(which.min(v.na), which.max(v.na))) 
} 
minmax(test) 

모든 최고의

+0

+1 - 나는 입력이 숫자 인 경우'which.min'와'which.max'가'match'보다 강력 할 것이라고 생각합니다. 청구 된 내용에도 불구하고 더 빠릅니다. – flodel

0
당신은 0 값을 제거한 후 match 기능을 사용할 수

:

test<- c(1,8,2,3,4,5,0,7) 
test2 <- test[test!=0] 
match(c(min(test2),max(test2)),test) 
4

사용 rangematch이면 맞춤 기능보다 빠릅니다.

vals = range(test[test != 0]) 
match(vals, test) 
+0

@ RussHyde의 해결책보다 빠르지 않다 ... – flodel