查找表/ Loc 排序的問題我試圖在這個數據表中找到測量值減半的時間。 我想要的輸出是一個匯總表,其中的時間是按樣本測量的一半。

這是腳本生成的匯總表,正如您所看到的,半小節的時間是不正確的。

我製作了以下腳本,使用 Loc 排序從該表中查找值,但我很難讓它工作。 這個腳本有什麼錯誤嗎? 這是我想要做的正確方法,如果不是,有人對我如何做到這一點有任何建議嗎?需要注意的一件事是半值可能與時間不完全匹配,因此我將在半測量點之前或之後尋找時間。
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])));
數據表腳本編寫回复:查找表/ Loc 排序的問題“Loc Sorted”需要排序的第一個參數才能正常工作。

另一方面,假設中間存在數據,以下內容可能會給出您想要的內容。
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
如果數據之間可能不存在中間,請檢查樣本是否在您可以定義的範圍內。
回复:查找表/ Loc 排序的問題這是我對解決問題的看法。它處理以下情況:最大測量值是偶數,因此存在從中獲取半場時間的確切行,或者如果最大測量值是奇數,它將插入時間值以得出半場時間價值
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]);
);
);