ルックアップ テーブルの問題 / Loc のソートこのデータ テーブルで測定値が半分になる時間を見つけようとしています。必要な出力は、サンプルごとに測定値が半分になる時間の概要テーブルです。

これはスクリプトによって生成された概要表ですが、ご覧のとおり、半分の測定の時点での時間は正しくありません。

Loc sorted を使用してこのテーブルから値を検索する次のスクリプトを作成しましたが、うまく動作しません。このスクリプトにエラーはありますか? これは私が実行しようとしていることに対して正しい方法でしょうか。そうでない場合、これを行う方法について何か提案はありますか? 1 つ注意すべき点は、半分の値が時間と一致しない可能性があるため、半分の測定ポイントの前または後の時間を検索することです。
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])));
データのブレンドとクリーンアップRe:ルックアップテーブルの問題/ソートされた場所「LocSorted」を正しく機能させるには、最初の引数を並べ替える必要があります。

一方、データの中間が存在すると仮定すると、以下はあなたが望むものを与えるかもしれません。
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
データの中間が存在しない可能性がある場合は、サンプルが定義可能な範囲内にあるかどうかを確認してください。
Re:ルックアップテーブルの問題/ソートされた場所これが問題を解決するための私の見解です。最大測定値が偶数であるためにハーフタイムを取得するための正確な行が存在する場合、または最大測定値が奇数である場合は、時間値を補間してハーフタイムを算出する場合を処理します。価値
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]);
);
);