J'ai des données expérimentales qui prennent une mesure toutes les minutes pendant 10 minutes.
Je veux ensuite prendre une moyenne pour un sous-ensemble de points de données au milieu de l'ensemble.
Ma solution est d'avoir une colonne cachée (:Range) avec une formule qui contient les critères (entrée via une fenêtre modale) et définit chaque ligne comme 1 ou 0 si elle doit être incluse dans le calcul.
Ma colonne de sortie utilise ensuite la fonction Col Mean pour prendre la moyenne des points d'intérêt.
Cette partie fonctionne très bien, mais je souhaite également que la première ligne vide (non incluse dans le calcul) prenne la valeur de la ligne suivante, ce qui facilitera la manipulation ultérieure des données. J'ai ajouté la fonction Lag comme ci-dessous.
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 )
)
Le problème est que lorsque je l'exécute en tant que script, la fonction Lag ne fonctionne pas. Si j'entre manuellement la formule ci-dessus, cela fonctionne bien, mais le script ci-dessous ne remplit que les lignes où : Range == 1, malgré le fait que je puisse voir que la formule est correctement appliquée à la colonne.
New Column( "Mean Measurement", Formula(
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 ))))
Y a-t-il une raison à cela et un moyen de forcer la colonne à réévaluer la formule pour qu'elle s'exécute correctement ?
Remarque, la fonction de réexécution des formules ne semble rien faire
Pourquoi faites-vous 10 mesures à 1 minute d'intervalle ? Pourquoi utilisez-vous une moyenne de quelques observations au milieu du cours du temps ?
Vous pourriez obtenir plus d'informations si vous analysez la courbe entière en tant que valeur de réponse. Voir le Explorateur de données fonctionnelles pour plus d'idées. Vous pouvez analyser un 'DOE fonctionnel' avec JMP Pro.
La fonction Lag() opère sur des lignes spécifiées, ce n'est pas une fonction "vectorisée".Dans une fonction de colonne, la ligne est implicite (la ligne du tableau), elle fonctionne donc sans problème dans la formule de colonne.
Pour votre script, si vous spécifiez la ligne à l'aide de la commande Row()== avant l'instruction de la fonction de décalage, le décalage doit renvoyer une valeur.
Row() = 3;
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 )
)
De plus, juste pour vous assurer que vous êtes au courant, l'argument du numéro de décalage pour le décalage (: colonne, ), s'il s'agit d'un nombre négatif, il s'agit en fait d'un "décalage avant".Dans l'exemple que vous montrez ci-dessus, il rechercherait la valeur dans la ligne suivante, pas dans la ligne précédente.