ich ein data.table
in der folgenden Form habe:data.table Reihen von Gruppe basierend auf Verzögerungswert entfernen
DT <- data.table(tag = rep(c("A", "B"), each = 10),
value = c(0, 3, 3, 3, 0, 1, 1, 1, 3, 0,
0, 1, 3, 1, 0, 3, 0, 1, 1, 0))
> DT
tag value
1: A 0
2: A 3
3: A 3
4: A 3
5: A 0
6: A 1
7: A 1
8: A 1
9: A 3
10: A 0
11: B 0
12: B 1
13: B 3
14: B 1
15: B 0
16: B 3
17: B 0
18: B 1
19: B 1
20: B 0
ich alle Zeilen entfernen möchte, die den Wert von 3, sondern nur diejenigen, folgen einem 0. Das heißt, ich möchte Zeile 2, 3, 4 und Zeile 16 entfernen, aber Zeile 9 und Zeile 13 beibehalten müssen.
Gibt es eine Möglichkeit, dies durchzuführen?
Ich wünschte, ich könnte dies schreiben, ohne die Läufe zweimal zu bewerten (mit RLE und RLEID), aber konnte nicht auf eine nette Weise denken. – Frank
Schön auch! Eine Alternative mit nur 'rle':' DT [setDT (rle (Wert)) [, rem: =! (Werte == 3 & Verschiebung (Werte) == 0)] [, rep (rem, Längen)]] ' – Jaap
Noch kürzer: 'DT [setDT (rle (Wert)) [, rep (! (Werte == 3 & Verschiebung (Werte) == 0), Längen)]]' – Jaap