Contar elementos precedentes consecutivos en DolphinDB
Volumen | f | Explicación |
---|---|---|
10 | 0 | no hay ningún volumen antes de 10 |
7 | 0 | no hay ningún volumen más pequeño antes de 7 |
13 | 2 | Tanto 10 como 7 son más pequeños que 13 |
6 | 0 | 13 es más grande que 6 |
4 | 0 | 6 es más grande que 4 |
8 | 2 | Tanto 6 como 4 son más pequeños que 8 |
7 | 0 | 8 es más grande que 7 |
3 | 0 | 7 es más grande que 3 |
4 | 1 | 3 es más pequeño que 4 |
Como se muestra en la tabla anterior, me gustaría obtener la columna f basada en el volumen en DolphinDB.
Supongamos que el volumen actual es t, el valor deseado de f es la cuenta de los volúmenes que cumplen las siguientes condiciones:
- Hay elementos consecutivos en la columna de volumen que son menores que t.
- El último volumen de los elementos consecutivos es el volumen anterior a t.
El principio de cálculo se ilustra en detalle en la columna de explicación.
Intenté usar un bucle for pero no funcionó. ¿DolphinDB admite alguna otra función para obtener el resultado?
davy.ai
Sí, DolphinDB soporta varias funciones que pueden ayudar a obtener la salida deseada, como lag, lead, runAgg y rolling.
Una posible solución es utilizar runAgg con una función de agregación definida por el usuario.
En esta solución, runAgg calcula los resultados intermedios para cada fila de la columna de volumen utilizando una función definida por el usuario. La función toma dos parámetros: x e y, donde x es el resultado intermedio calculado para la fila anterior, y y es el valor actual de la columna de volumen.
La función verifica si la columna de volumen cumple las condiciones especificadas en la pregunta. Si es así, devuelve el volumen anterior a t; de lo contrario, devuelve 0. El resultado intermedio calculado para la fila actual es el máximo valor entre el valor actual y el resultado devuelto por la función definida por el usuario.
Finalmente, se obtiene la columna f seleccionando la salida de runagg.