2016-03-30 7 views
0

Ich bin neu hier und nicht wirklich ein Profi in R. Hoffe ihr könnt mir helfen.Identifizieren Sie sukzessive gleiche Werte in einem Vektor in R

Ich habe einen Vektor ls und möchte mindestens drei gleiche aufeinanderfolgende Werte in dort identifizieren.

Beispiel:

ls <- c(1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1) 

Jetzt möchte ich die Position in ls identifizieren, wo die Mindest von drei nacheinander -1 der tut Start. Hier wäre die Ausgabe (die Positionen):

[1] 4 10 

Hat jemand von euch eine Idee? Vielen Dank.

Antwort

1

können Sie rle verwenden

r <- rle(ls) 
(cumsum(r$lengths)-r$lengths+1)[r$value==-1 & r$length>=3] 
#> [1] 4 10 

Die kumulative Summe von Lauflängen die Endpunkte von Läufen gibt. Wenn Sie die Längen subtrahieren, erhalten Sie die Position unmittelbar vor dem Start, also fügen Sie eine zurück hinzu. Subset das Ergebnis für Orte, wo der Wert -1 ist und die Lauflänge ist mindestens 3.

+0

Vielen Dank! Es hat perfekt funktioniert. – martin1009

Verwandte Themen