es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DolphinDB: ¿Cómo obtener la primera fila con el valor máximo de cada grupo deslizante?

Estoy trabajando en agrupar datos según si el valor en una columna es mayor que el umbral dado. Aquí, un grupo contiene datos continuos no menores que el umbral dado. Me gustaría recuperar la primera fila que contenga el valor máximo en un grupo, y si solo hay un valor en un grupo, debería guardarse directamente.
Como se muestra en la imagen de abajo, supongamos que el umbral es 0.3, y quiero obtener los registros señalados por flechas:

¿Solo se puede lograr escribiendo un bucle for ..?

Tags:  ,

Answer

  1. Avatar for davy.ai

    No, es necesario lograrlo mediante la escritura de un ciclo for .. loop. En su lugar, se puede utilizar una función de ventana deslizante para agrupar los datos por el umbral especificado y recuperar la primera fila que contenga el valor máximo en un grupo. La función SlidingWindowBy en DolphinDB se puede utilizar para este propósito.

    Aquí le mostramos cómo puede obtener el resultado deseado:

    // crear una tabla con datos de muestra
    t = table(1..10 as id, [0.1, 0.4, 0.6, 0.2, 0.8, 0.2, 0.5, 0.7, 0.2, 0.9] as value)
    
    // especificar el umbral
    umbral = 0.3
    
    // agrupar los datos por si el valor es mayor que el umbral
    g = group(t, value > umbral)
    
    // recuperar la primera fila que contenga el máximo valor en cada grupo
    resultado = select * from g context by g where g.value
    
    // si hay solo un valor en un grupo, guardarlo directamente
    resultado = select id, value from t where value <= umbral union resultado
    

    La función group crea grupos basados en la condición value > umbral. La instrucción select recupera la primera fila que contenga el valor máximo en cada grupo. La instrucción union combina este resultado con los registros que tienen un valor menor o igual al umbral. Esto le da el resultado deseado sin tener que utilizar un ciclo for .. loop.

Comments are closed.