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

Il s'agit du tableau estival généré par le script et comme vous pouvez le voir le temps à mi-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 si ce n'est pas le cas, quelqu'un a-t-il des suggestions sur la façon dont je peux le faire? une chose à noter est que la demi-valeur peut ne pas correspondre exactement à une heure, je vais donc rechercher 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])));
Tableau de donnéesScriptRe: Problème avec la table de recherche/Loc trié"Loc Sorted" nécessite le premier argument trié pour fonctionner correctement.

D'un autre côté, ce qui suit peut donner ce que vous voulez, en supposant que le milieu existe parmi les données.
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
Si le milieu n'existe pas parmi les données, vérifiez si un échantillon se situe dans une plage que vous pouvez définir.
Re: 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 existe, ou si la mesure maximale est un nombre impair, il interpolera la valeur du temps pour obtenir 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]);
);
);