順序付けされたデータがラベル付けされてdata.table
おり、カウントダウンをリセットする「特別な」レコードに到達するまでのレコード数を示す列を追加したいと考えています。
例えば:
DT = data.table(idx = c(1,3,3,4,6,7,7,8,9),
name = c("a", "a", "a", "b", "a", "a", "b", "a", "b"))
setkey(DT, idx)
#manually add the answer
DT[, countdown := c(3,2,1,0,2,1,0,1,0)]
与える
> DT
idx name countdown
1: 1 a 3
2: 3 a 2
3: 3 a 1
4: 4 b 0
5: 6 a 2
6: 7 a 1
7: 7 b 0
8: 8 a 1
9: 9 b 0
カウントダウン列が、「b」という行までの行数を示していることを確認してください。問題は、その列をコードで作成する方法です。
キーは等間隔ではなく、重複が含まれている可能性があることに注意してください (そのため、問題の解決にはあまり役立ちません)。一般に、b 以外の名前は異なる可能性がありますが、ソリューションでこれが必要な場合は、True/False だけのダミー列を追加できます。