Problem mit Lookup-Tabelle / Lok sortiertIch versuche in dieser Datentabelle den Zeitpunkt zu finden, zu dem der Messwert die Hälfte beträgt. Meine gewünschte Ausgabe wäre eine zusammenfassende Tabelle mit Zeit bei halber Messung nach Probe.

Dies ist die vom Skript generierte zusammenfassende Tabelle und wie Sie sehen, ist die Zeit zum halben Takt nicht korrekt.

Ich habe das folgende Skript erstellt, das Loc sortiert verwendet, um die Werte aus dieser Tabelle nachzuschlagen, aber ich habe Schwierigkeiten, es zum Laufen zu bringen. Gibt es Fehler in diesem Skript? Ist dies die richtige Methode für das, was ich tun möchte, und wenn nicht, hat jemand Vorschläge, wie ich dies tun kann? Zu beachten ist, dass der halbe Wert möglicherweise nicht genau mit einer Zeit übereinstimmt, sodass ich nach der Zeit vor oder nach dem halben Takt suchen werde.
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])));
DatentabelleSkriptingBetreff: Problem mit Lookup-Tabelle / Lok sortiert"Loc Sorted" erfordert, dass das erste sortierte Argument richtig funktioniert.

Auf der anderen Seite könnte das Folgende das geben, was Sie wollen, vorausgesetzt, dass die Mitte zwischen den Daten existiert.
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
Wenn die Mitte zwischen den Daten möglicherweise nicht vorhanden ist, prüfen Sie, ob eine Stichprobe in einen von Ihnen definierbaren Bereich fällt.
Betreff: Problem mit Lookup-Tabelle / Lok sortiertHier ist meine Meinung zur Lösung des Problems.Es behandelt die Fälle, in denen entweder die Max-Messung eine gerade Zahl ist und daher eine genaue Zeile existiert, um die Halbzeit zu erhalten, oder wenn die Max-Messung eine ungerade Zahl ist, wird der Zeitwert interpoliert, um die Halbzeit zu erhalten Wert
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]);
);
);