2017-06-12 5 views
-1

Ich habe einen Vektor, in dem ich berechnen muss, wie oft Daten von 0 bis 100 und zurück auf 0 geschaltet. Ein Beispiel ist wie folgt angegeben.Berechnung der Anzahl der Schalter im Vektor

Input 
X1<-c(100,100,100,0,0,0,0,0,100,100,100,100,100,0,0,0,0,100,100,100,0,0,100,100) 

So soll die Ausgabe sein als der Wert bei 0 gestartet bei 100 für die einige Zeit aufgehalten und wieder auf 0 Meine Anforderungen ist zu zählen, wie oft dieser Schalter aufgetreten ist. Ich bin mir der RLE bewusst, aber das gibt mir nur die Länge.

Vielen Dank im Voraus für die Hilfe.

+1

Oder da Sie rle 'Boden (Länge (RLE (X1) $ Längen)/2)' – G5W

+2

@Anish erwähnen, sollte die erwartete Antwort ** 2 **, da Sie nicht, wenn der letzte weiß Lauf von '100' zurückgeschaltet auf' 0'? Vielleicht suchen Sie nur nach Schaltern von "0" auf "100"? – CPak

+0

@ChiPak Ja, ich glaube, da ich keine Kontrolle über das letzte oder sogar das erste Element habe. –

Antwort

2

Das sieht ausreichend

sum(X1[-1] != X1[-length(X1)])/2 

Annahmen sind, dass

  • Sie haben nur zwei eindeutige Werte in X1
  • Das letzte Element von X1 gleich dem ersten Element, das heißt, er schaltet zurück zum ursprünglichen Zustand am Ende.
2

Sie können wie etwas tun,

sum(diff(X1) == 100) 
#[1] 3 

#Or 

min(sum(diff(X1) == 100), sum(diff(X1) == -100)) 
#[1] 3 
1

Sie könnten rle laufen und dann durch drei Elemente values zu einem Zeitpunkt, zu sehen laufen, wenn die erforderliche Bedingung erfüllt ist.

with(rle(X1), 
    sum(sapply(3:length(lengths), function(i) 
     values[i-2] == 0 & values[i-1] == 100 & values[i] == 0))) 
#[1] 2 
Verwandte Themen