Extrahiere aufeinanderfolgende Sequenzen aus dem Vektor

8

Ich habe einen Vektor namens v mit positiven und negativen Werten sowie Nullen. Die Frage ist, wie man (in einer Liste) alle kontinuierlichen Folgen positiver Zahlen extrahiert, das sind die Folgen positiver Zahlen, die durch Nullen getrennt sind.

Hier ist v:

%Vor%

Die Ausgabe muss etwa lauten:

%Vor%

Irgendwelche Ideen?

    
WAF 13.01.2015, 23:02
quelle

4 Antworten

6

Sie können versuchen:

%Vor%

Was ich getan habe:

  • hat die 0-Position aus dem Vektor genommen, der mit den & gt; = 0 Werten von v gebildet wurde.
  • Mit der Funktion Map können Sie den Teil des Vektors zwischen zwei Nullen extrahieren
  • Der Zweck der letzten Zeile besteht darin, aus dem Ergebnis die Sequenzen ohne Werte zu entfernen (wenn es zum Beispiel Sequenzen von zwei oder mehr Nullen im ursprünglichen Vektor gibt)
nicola 13.01.2015, 23:21
quelle
14

Hier ist ein kurzer mit split :

%Vor%

Dies setzt im Wesentlichen nur v auf positive Zahlen, dann verwendet den cumsum(v==0) -Zähler (der innerhalb einer Gruppe positiver Werte stabil sein wird, und erhöht, wenn er die unmittelbar folgende 0 trifft) in split diese Gruppe. Voila!

Ein weiterer Versuch mit rle :

%Vor%     
thelatemail 13.01.2015 23:22
quelle
6

Hier eine Option:

%Vor%

Die Idee:

  1. Erstellen Sie eine Gruppen-ID für jede 0

  2. Für jede Gruppe entfernen Sie 0, prüfen Sie, ob alle Werte positiv sind, andernfalls geben Sie NA

  3. zurück
  4. Entferne fehlende Vektoren aus dem Endergebnis.

data.table Lösung

Es ist besser, Ergebnisse in einer data.table (data.frame) als in einer Liste zu gruppieren. Ich habe den gleichen Code oben verwendet, nur wickle ich ihn in eine data.table-Struktur.

%Vor%     
agstudy 13.01.2015 23:21
quelle
3

Ich werfe eins hinein

%Vor%     
rawr 13.01.2015 23:23
quelle

Tags und Links