Come posso utilizzare una funzione di ritardo applicata dai gruppi?Ho dati in cui vorrei calcolare il ritardo da una riga a quella successiva (è una serie temporale), ma ho dati per molti gruppi.Voglio che il ritardo venga creato separatamente all'interno di ciascun gruppo.Per molte funzioni statistiche (ad esempio Col Mean) esiste la possibilità di aggiungere una o più variabili Per gruppo.Non sembra esserci la stessa funzionalità per le funzioni Lag o Dif e non riesco a trovare nulla nella documentazione di scripting che indichi come potrebbe essere fatto.C'è un modo per calcolare facilmente i ritardi per ciascun gruppo separatamente?L'unico modo che ho attualmente trovato è ordinare prima i dati per data e per gruppo, quindi utilizzare una formula IF che dipende dal gruppo uguale al ritardo (gruppo), come IF (gruppo) - ritardo (gruppo), quindi lag (colonna di interesse), altrimenti mancante.
Combinazione e pulizia dei datiRi: Come posso utilizzare una funzione di ritardo applicata dai gruppi?Avrei potuto immaginare che txnelson avrebbe avuto una soluzione!In realtà non è più elegante o più semplice di quello che avevo, ma evita la necessità di ordinare i dati, il che lo rende notevolmente più flessibile.Grazie.
Ri: Come posso utilizzare una funzione di ritardo applicata dai gruppi?Ecco una formula che sembra funzionare, anche quando le righe non sono ordinate in base a 2 livelli. (ovvero ordinato per data) Il lagList nella formula è lì per gestire il problema che la funzione Col Moving Average() restituisce la riga corrente, anche alla prima occorrenza.
If( Row() == 1, lagList = {} );
If( Contains( lagList, :administrative_area_level_1 || :administrative_area_level_2 ),
Col Moving Average(
:deaths,
weighting = 1,
before = 1,
:administrative_area_level_1,
:administrative_area_level_2
) * 2 - :deaths,
Insert Into( lagList, :administrative_area_level_1 || :administrative_area_level_2 )
);

Ecco una formula inefficiente che funziona anche
curLevel1 = :administrative_area_level_1;
curLevel2 = :administrative_area_level_2;
curRow = Row();
Try(
:deaths[Max(
Current Data Table() << get rows where(
:administrative_area_level_1 == curLevel1 & (:administrative_area_level_2 == curLevel2 & Row() < curRow)
)
)]
);
Ri: Come posso utilizzare una funzione di ritardo applicata dai gruppi?Per renderlo più concreto, ho allegato un semplice esempio.La colonna delle morti ritardate è ciò che voglio, ma mi piacerebbe poterlo fare in modo più semplice ed elegante.