によってラグ値に基づいて行を削除data.table:は、次の形式で、私は<code>data.table</code>を持っているグループ
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
私は3の値を持っていますが、唯一のものは0に続くすべての行を削除したいと思います。つまり、行2,3,4、行16は削除したいが、行9と行13を保持する必要があります。
これを実行する方法はありますか?
私は、実行を2回評価することなく(rleとrleidの両方で)これを書くことができますが、いい方法は考えられませんでした。 – Frank
いいですね! 'rle'だけの代替方法:' DT [setDT(rle(value)]、rem:=!(values == 3&shift(values)== 0)]、[rep(rem、lengths)]] ' – Jaap
さらに短く: 'DT [setDT(rle(value)] [、(値== 3とシフト(値)== 0)、長さ]]] – Jaap