Contar cambios de estado

Hola, a ver si me podeis echar una mano.
Soy nuevo en esto de Knime y estoy atascado con un problemilla que no se como darle solución.
Tengo una columna que cada 15 segundos registra el estado de un pulsador (o desactivado y 1 activado). Necesito saber cuantas veces se ha activado, vamos, cuantas veces ha pasado de cero a uno.
En este caso, el resultado seria TRES.
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
1
1
1
1
0
0

Cualquier ayuda será bien recibida.
Muchas gracias

Hola @juandejuan

Bienvenido al forum y a la comunidad de KNIME.

La operación que quieres hacer es una derivada, es decir la diferencia entre el valor actual x(t) y el precedente x(t-1).

La manera de simular una derivada en KNIME es duplicando la columna con un desplazamiento de una linea. Para hacer este desplazamiento, basta con usar el nodo -Lag Column-:

Una vez que hayas generado la nueva columna con un desplazamiento de 1 linea (lag =1) en la configuracion del nodo, bastará que calcules la diferencia entre las dos columnas con el nodo -Math Formula-:

Las posibilidades son las siguientes:

1 - 0 = 1
1 - 1 = 0
0 - 1 = -1
1 - 1 = 0

Como veras, todo lo que es diferente x(t) - x(t-1) da ±1. Bastará entonces que uses la función abs() para obtener un 1 (true) cuándo los valores consecutivos de tu columna cambian y un 0 (false) cuando permanecen iguales.

Si quieres saber cuantas veces cambio de estado, bastara que hagas la suma de todos los unos, es decir una integral en este caso. Esto se hace usando el nodo -GroupBy-

Tendras justo que usar el operador “sum” como funcion de agregación y no seleccionar ninguna columna como opción de agrupación.

Estoy respondiendo desde mi movil, asi que disculpa que no adjunte el workflow.

Espero que te sea de ayuda. Sino, dínoslo y te seguiremos ayudando.

Saludos
Ael

2 Likes

Muchísimas gracias por la pronta respuesta.

Lo probaré a ver si soy capaz.

1 Like

Fue un placer. Si no llegas a solucionarlo, mañana subiré la solución. Buena suerte y animo !

Ael

Hola, @juandejuan

La solución de @aworker me ha descubierto el nodo Lag Column, yo lo hacía más difícil generando dos campos calculados con Math Formula: ROWINDEX y ROWINDEX-1 y haciendo un join por esos campos y después haciendo la diferencia con otro Math Formula.

Como lo que buscas son los valores -1 (paso de 1 a 0) puedes filtrar antes por ese valor y luego agrupar con un count.

Gracias Ael !!!
Saludos.

1 Like

Hola @juandejuan

Adjunto te envío un workflow con tres soluciones posibles:

20220323 Pikairos Contar cambios de estado.knwf (42.1 KB)

para que puedas elegir :wink:

EDIT: Si lo que quieres es solamente contar el numero de veces que el pulsador es activado, entonces tendras que usar como formula en el -Math Formula- node, la siguiente:

(($Pulsador$ - $Pulsador(-1)$) == 1) || ($$ROWINDEX$$ == 0 && $Pulsador$ == 1)

Espero que sea de utilidad.

Saludos

Ael

1 Like

Hola @jmgor

Muchas gracias por tus comentarios y contento que te pueda servir también.

¡Feliz día en Almeria!

Un abrazo,
Ael

1 Like

Hola,
Pues MIL GRACIAS a todos por ayudarme. Efectivamente ya lo tengo solucionado gracias a vosotros.
Tenia mas o menos claro como hacerlo, pero no tenia ni idea del como hacerlo con Knime, y el descubrimiento del nodo Lag Column ha sido todo un éxito.
Lo dicho, muchísimas gracias.

1 Like

Hola @juandejuan

Me alegro mucho. Encantado de ayudar. No dudes en volver a solicitarnos si necesario.

Suerte y feliz practica de KNIME.

Saludos

Ael

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.