¿Cómo puedo usar una función de retraso aplicada por grupos?Tengo datos en los que me gustaría calcular el retraso de una fila a la siguiente (es una serie de tiempo), pero tengo datos para muchos grupos.Quiero que se cree el retraso dentro de cada grupo por separado.Para muchas funciones estadísticas (p. ej., Col Mean) existe la opción de agregar una o más variables Por grupo.No parece haber la misma funcionalidad para las funciones Lag o Dif y no puedo encontrar nada en la documentación de secuencias de comandos que indique cómo se podría hacer.¿Hay alguna forma de calcular fácilmente los retrasos de cada grupo por separado?La única forma que he encontrado actualmente es ordenar primero los datos por fecha y por grupo, y luego usar una fórmula IF que depende del Grupo que iguala el retraso (Grupo), como IF (Grupo) - retraso (Grupo), luego lag (columna de interés), de lo contrario falta.
Tabla de datossecuencias de comandosRe: ¿Cómo puedo usar una función de retraso aplicada por grupos?¡Podría haber adivinado que txnelson tendría una solución!En realidad, no es más elegante ni más simple que el que tenía, pero evita la necesidad de ordenar los datos, lo que lo hace considerablemente más flexible.Gracias.
Re: ¿Cómo puedo usar una función de retraso aplicada por grupos?Aquí hay una fórmula que parece funcionar, incluso cuando las filas no están ordenadas por los 2 niveles. (es decir, ordenado por fecha) LagList en la fórmula está ahí para manejar el problema de que la función Col Moving Average() devuelve la fila actual, incluso en la primera aparición.
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 )
);

Aquí hay una fórmula ineficiente que también funciona
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)
)
)]
);
Re: ¿Cómo puedo usar una función de retraso aplicada por grupos?Para hacer esto más concreto, he adjuntado un ejemplo simple.La columna de muertes retrasadas es lo que quiero, pero me gustaría poder hacerlo de manera más simple o elegante.