Comment utiliser une fonction de décalage appliquée par groupes ?J'ai des données pour lesquelles j'aimerais calculer le décalage d'une ligne à l'autre (c'est une série chronologique), mais j'ai des données pour de nombreux groupes.Je veux que le décalage soit créé au sein de chaque groupe séparément.Pour de nombreuses fonctions statistiques (par exemple Col Mean), il est possible d'ajouter une ou plusieurs variables Par groupe.Il ne semble pas y avoir la même fonctionnalité pour les fonctions Lag ou Dif et je ne trouve rien dans la documentation sur les scripts pour indiquer comment cela pourrait être fait.Existe-t-il un moyen de calculer facilement les décalages pour chaque groupe séparément ?La seule façon que j'ai trouvée actuellement est de trier d'abord les données par date et par groupe, puis d'utiliser une formule IF qui dépend du groupe égal au décalage (Groupe), telle que IF (Groupe) - décalage (Groupe), puis décalage (colonne d'intérêt), sinon manquant.
Mélange et nettoyage des donnéesRe : Comment utiliser une fonction de décalage appliquée par les groupes ?J'aurais pu deviner que txnelson aurait une solution !Ce n'est pas vraiment plus élégant ni plus simple que ce que j'avais, mais cela évite d'avoir à trier les données, ce qui les rend considérablement plus flexibles.Merci.
Re : Comment utiliser une fonction de décalage appliquée par les groupes ?Voici une formule qui semble fonctionner, même lorsque les lignes ne sont pas triées selon les 2 niveaux. (c'est-à-dire trié par date) La lagList dans la formule est là pour gérer le problème selon lequel la fonction Col Moving Average() renvoie la ligne actuelle, même à la première occurrence.
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 )
);

Voici une formule inefficace qui fonctionne aussi
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 : Comment utiliser une fonction de décalage appliquée par les groupes ?Pour rendre cela plus concret, j'ai joint un exemple simple.La colonne des décès décalés est ce que je veux - mais j'aimerais pouvoir le faire de manière plus simple ou plus élégante.