Ho un data.table
con dati ordinati etichettati e voglio aggiungere una colonna che mi dice quanti record fino a quando non arrivo a un record "speciale" che resetta il conto alla rovescia.Aggiungere una colonna conto alla rovescia alle righe contenenti data.table fino a quando una riga speciale ha incontrato
Ad esempio:
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)]
Dà
> 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
vedere come la colonna di conto alla rovescia mi dice quante righe fino a quando una fila denominata "b". La domanda è come creare quella colonna nel codice.
Si noti che la chiave non è equidistante e può contenere duplicati (quindi non è molto utile per risolvere il problema). In generale i nomi non-b potrebbero essere diversi, ma potrei aggiungere una colonna fittizia che sia solo True/False se la soluzione lo richiede.
+1. Stavo solo leggendo i documenti su '.I' e cercando di pensare a come potrebbe essere utile qui, ma non ho abbastanza familiarità con' data.table' per capire da dove cominciare! – A5C1D2H2I1M1N2O1R2T1
Sono tutte buone risposte, ma mi piace questo dato che non usa variabili extra per eseguire il lavoro. – Corone