2012-04-05 6 views

답변

14

당신이 sign 기능에 대해 알고 경우는 아주 간단합니다 ...

which(diff(sign(df))!=0) 
# [1] 2 
+1

...'diff' 함수에 대해 아는 경우 : – Tommy

+0

감사합니다. 매우 도움이됩니다. –

+0

이 대답은 c (0,1)가 부호가 변경된 것으로 간주합니다. 응용 프로그램에 따라 필요하지 않을 수도 있습니다! 복잡한 재미를 위해 – MHH

1

나는 여호수아의 대답을 선호하지만, 여기에 대안은 단지 재미를 위해, 더 복잡 하나 :

head(cumsum(rle(sign(df))$lengths),-1) 
당신이 끔찍한 사람이되고 싶은 경우에
+0

+1! –

+0

@ JoshuaUlrich의 위 응답과 유사하게이 대답은 c (0,1)가 부호 변경을한다고 간주합니다. 응용 프로그램에 따라 필요하지 않을 수도 있습니다! – MHH

-1

, 당신은 항상 for 루프를 사용할 수 있습니다

signchange <- function(x) { 
    index = 0 
    for(i in 1:length(x)) 
    { 
     if(x[i] < 0) 
     { 
      return (index) 
     } 
     else 
     { 
      index = index + 1 
     } 
    } 
    return (index) 
} 
+2

나는 downvote가 아니었지만 당신이 끔찍한 사람이되고 루프를 사용한다면 적어도 첫 번째 요소가 양수인지 음수인지 확인해야합니다. as 함수는 첫 번째 음수 값을 감지하지만 첫 번째 부호 변경은 감지하지 않습니다. – Dason