Split-Vektor getrennt durch n Nullen in verschiedene Gruppen

8

Ich habe einen Vektor x

%Vor%

Ich muss Werte aufteilen, die durch n getrennt sind (in diesem Fall nehmen wir n ist 3 an) oder mehrere Nullen in verschiedene Gruppen.

Gewünschte Ausgabe wäre

%Vor%

Folgendes funktioniert nicht, da es x aufteilt, auch wenn weniger als n Nullen in einer Gruppe vorhanden sind.

%Vor%     
d.b 30.08.2017, 19:12
quelle

5 Antworten

6

Hier ist mein Versuch. Diese Methode ersetzt Läufe von Null, deren Länge kleiner oder gleich 3 ist. Da NA bei Verwendung von split() entfernt wird, bleibt die gewünschte Ausgabe übrig.

%Vor%     
Rich Scriven 30.08.2017, 20:57
quelle
4

Hier ist eine Methode mit rle , split und lapply

%Vor%

Eine zweite Methode ohne lapply ist wie folgt

%Vor%

Schließlich würden Sie einfach das letzte Listenelement löschen, wie head(split(x, inverse.rle(temp)), -1) .

    
lmo 30.08.2017 19:36
quelle
3

Diese Methode unterscheidet sich nur geringfügig von dem, was Sie bereits vorgeschlagen haben, und enthält einen ersten Schritt, bei dem alle Abschnitte von n oder mehr Nullen durch einen Wert ersetzt werden, der nicht in x enthalten ist, z. B. max + 1:

%Vor%     
Lamia 30.08.2017 20:07
quelle
2

Hier ist eine Idee, die rle und inverse.rle mehrmals benutzt, um eine Untermenge von x ( x_sub ) und Gruppennummer ( group_sub ) zu erstellen. Schließlich verwenden Sie split , um die endgültigen Ergebnisse zu erhalten.

%Vor%     
www 30.08.2017 20:00
quelle
2

Noch eine andere Lösung mit rle (zweimal) und inverse.rle .

%Vor%

Inzwischen habe ich gemerkt, dass der Code, der die Schleife oben und die Schleife selbst vorbereitet, stark vereinfacht werden könnte. Um es zu vervollständigen, werde ich die ersten Codezeilen wiederholen.

%Vor%     
Rui Barradas 30.08.2017 20:21
quelle

Tags und Links