2012-04-05 9 views

risposta

14

Questo è abbastanza semplice, se si sa sulla funzione sign ...

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

... e se conosci la funzione 'diff' :) – Tommy

+0

Grazie. Questo è molto utile. –

+0

Attenzione, questa risposta considera c (0,1) avere un cambio di segno. Questo può o non può essere desiderato a seconda dell'applicazione! – MHH

1

preferisco la risposta di Joshua, ma qui è un'alternativa, una più complicata solo per divertimento:

head(cumsum(rle(sign(df))$lengths),-1) 
+0

+1 per il divertimento complicato! –

+0

in modo simile alla risposta di cui sopra da @JoshuaUlrich, questa risposta considera c (0,1) avere un cambio di segno. Questo può o non può essere desiderato a seconda dell'applicazione! – MHH

-1

Se vuoi essere una persona terribile, si può sempre usare un ciclo 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

Non ero il downvote ma se hai intenzione di essere una persona terribile e usa un ciclo dovresti almeno controllare se il primo elemento è positivo o negativo. La funzione come è rileva il primo valore negativo - non il primo cambiamento di segno. – Dason

Problemi correlati