Problème avec la table de recherche / Loc triéJ'essaie de trouver l'heure à laquelle la valeur mesurée est de moitié dans ce tableau de données. Le résultat souhaité serait un tableau récapitulatif avec le temps à mi-mesure par échantillon.

Il s'agit du tableau récapitulatif généré par le script et comme vous pouvez le constater, le temps à demi-mesure n'est pas correct.

J'ai créé le script suivant qui utilise Loc trié pour rechercher les valeurs de cette table mais j'ai du mal à le faire fonctionner. Y a-t-il des erreurs dans ce script ? Est-ce la bonne méthode pour ce que je cherche à faire et sinon, quelqu'un a-t-il des suggestions sur la façon de procéder ? une chose à noter est que la demi-valeur peut ne pas correspondre exactement à une heure, je chercherai donc l'heure avant ou après le point de demi-mesure.
Names Default To Here(1);
Data Table( "Data" ) << Summary(
Group( :Sample, ),
Max( :Measurement ),
Freq( "None" ),
Weight( "None" )
);
New Column( "Half Max Measure", Formula (:Name("Max(Measurement)") / 2));
New Column( "Time At Half Measurement", Format ("h:m"), Formula(
dt = Data Table( "Data" );
If(dt:Sample == Sample,
Bracket = Loc Sorted( dt:Measurement << getvalues, :Half Max Measure );
dt:Time[Bracket])));
Mélange et nettoyage des donnéesRe : Problème avec la table de recherche / Loc triéVoici mon point de vue sur la résolution du problème.Il gère les cas où soit la mesure maximale est un nombre pair, et donc une ligne exacte pour obtenir la mi-temps à partir de laquelle existe, ou si la mesure maximale est un nombre impair, il interpolera la valeur de temps pour trouver la mi-temps valeur
Names Default To Here( 1 );
dt = Data Table( "Data" );
dtSum = dt << Summary(
Group( :Sample, ),
Max( :Measurement ),
Freq( "None" ),
Weight( "None" ),
Link to Original Data Table( 0 ),
Output Table( "The Summaries" )
);
dtSum << New Column( "Half Max Measure", Set Each Value( :Name( "Max(Measurement)" ) / 2 ) );
dtSum << New Column( "Time At Half Measurement", Format( "h:m:s" ) );
// Get the Half Max Measure
For( i = 1, i <= N Rows( dtSum ), i++,
theRow = dt << get rows where(
dt:Sample == dtsum:Sample[i] & dt:Measurement == dtSum:Half Max Measure[i]
);
If( N Rows( theRow ) > 0,
dtSum:Time At Half Measurement[i] = dt:Time[theRow[1]]
,
// No Measurement was taken at exact Half Time, so interprolate the finding
rowBefore = Max(
dt << get rows where(
dt:Sample == dtsum:Sample[i] & dt:Measurement > dtSum:Half Max Measure[i]
)
);
rowAfter = Min(
dt << get rows where(
dt:Sample == dtsum:Sample[i] & dt:Measurement < dtSum:Half Max Measure[i]
)
);
ratio = (dt:Measurement[rowBefore] - dtSum:Half Max Measure[i]) / (dt:Measurement[
rowBefore] - dt:Measurement[rowAfter]);
dtSum:Time At Half Measurement[i] = dt:Time[rowBefore] + ratio * (dt:Time[rowAfter] -
dt:Time[rowBefore]);
);
);
Re : Problème avec la table de recherche / Loc trié"Loc Sorted" nécessite que le premier argument soit trié pour fonctionner correctement.

D'un autre côté, ce qui suit peut donner ce que vous voulez, en supposant qu'il existe un milieu parmi les données.
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
Si le milieu peut ne pas exister entre les données, vérifiez si un échantillon se situe dans une plage que vous pouvez définir.