Ho un vettore:R identificare una riga prima di un cambiamento di segno
df <- c(5,9,-8,-7,-1)
Come posso individuare la posizione prima di un cambiamento di segno? cioè df[2]
Ho un vettore:R identificare una riga prima di un cambiamento di segno
df <- c(5,9,-8,-7,-1)
Come posso individuare la posizione prima di un cambiamento di segno? cioè df[2]
Questo è abbastanza semplice, se si sa sulla funzione sign
...
which(diff(sign(df))!=0)
# [1] 2
preferisco la risposta di Joshua, ma qui è un'alternativa, una più complicata solo per divertimento:
head(cumsum(rle(sign(df))$lengths),-1)
+1 per il divertimento complicato! –
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
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)
}
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
... e se conosci la funzione 'diff' :) – Tommy
Grazie. Questo è molto utile. –
Attenzione, questa risposta considera c (0,1) avere un cambio di segno. Questo può o non può essere desiderato a seconda dell'applicazione! – MHH