Problema con la tabla de búsqueda / Loc ordenadoEstoy tratando de encontrar el momento en el que el valor medido es la mitad en esta tabla de datos. Mi resultado deseado sería una tabla de resumen con el tiempo a la mitad de la medición por muestra.

Esta es la tabla de resumen generada por el script y, como puede ver, el tiempo a la mitad de la medida no es correcto.

He creado el siguiente script que usa Loc ordenado para buscar los valores de esta tabla, pero tengo dificultades para que funcione. ¿Hay algún error en este script? ¿Es este el método correcto para lo que estoy buscando hacer y si no, alguien tiene alguna sugerencia sobre cómo puedo hacer esto? Una cosa a tener en cuenta es que es posible que el valor medio no coincida exactamente con un tiempo, por lo que buscaré el tiempo antes o después del punto medio de medida.
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])));
Tabla de datosScriptingRe: Problema con la tabla de búsqueda / Loc ordenado"Loc Sorted" requiere que el primer argumento ordenado funcione correctamente.

Por otro lado, lo siguiente podría darle lo que desea, suponiendo que exista el medio entre los datos.
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
Si es posible que no exista el medio entre los datos, verifique si una muestra se encuentra dentro de un rango que pueda definir.
Re: Problema con la tabla de búsqueda / Loc ordenadoAquí está mi opinión sobre la solución del problema.Maneja los casos en los que la medición máxima es un número par y, por lo tanto, existe una fila exacta para obtener el medio tiempo, o si la medición máxima es un número impar, interpolará el valor del tiempo para obtener el medio tiempo. valor
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]);
);
);