<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Hola a todos,
Tengo un archivo de registro de temperatura a intervalos desiguales y la duración entre ellos.
Quiero limpiar el conjunto de datos para que no haya temperaturas de repetición ni intervalos cortos entre las mismas mediciones de temperatura.
Para borrar las repeticiones utilizo el siguiente código:
Repite = dt << obtener filas donde ( Retraso ( : Temperatura , 1 ) == : Temperatura ) ;
dt << eliminar filas ( repite ) ;
Para los saltos cortos entre las mismas temperaturas utilizo:
Saltos = dt << obtener filas donde ( Y ( Retraso ( : Temperatura , 1 ) == Retraso ( : Temperatura , - 1 ) , : Duración < 2 ) ) ;
dt << eliminar filas ( Saltos ) ;
esto se hace de forma repetitiva, ya que una vez que se limpian los saltos, podría haber repeticiones nuevas y al revés. Así que lo uso en un bucle for. Siempre puedo hacer esto en exceso (establecer i en un número alto) pero es ineficiente.
¿Alguna sugerencia para mejorar el bucle para que se detenga cuando no hay repeticiones de Saltos?
El guión general se ve así:
dt = Nueva mesa ( "Archivo de registro" , Añadir filas ( 500 ) ) ;
dt << Nueva Columna ( "Temperatura" ,
Establecer propiedad ( "Valor de los colores" , { 1 = - 13977687 , 2 = - 3780931 , 3 = - 4222943 , 4 = - 13596966 , 5 = - 2211217 } ) ,
Celular de color por valor
) ;
Por cada fila ( dt : Temperatura = Entero aleatorio ( 5 ) ) ;
dt << Nueva Columna ( "Duración" ) ;
Por cada fila ( dt : Duración = Entero aleatorio ( 3 ) ) ;
// borrar filas repetidas y saltos cortos
por ( yo = 1 , yo <= 5 , yo ++,
Repite = dt << obtener filas donde ( Retraso ( : Temperatura , 1 ) == : Temperatura ) ;
dt << eliminar filas ( repite ) ;
Saltos = dt << obtener filas donde ( Y ( Retraso ( : Temperatura , 1 ) == Retraso ( : Temperatura , - 1 ) , : Duración < 2 ) ) ;
dt << eliminar filas ( Saltos ) ;
) ;
Sí, son equivalentes. La suma siempre devuelve un número y JMP trata todos los números que no son cero como VERDADERO. Así que no importa si la prueba devuelve 1 o 37. Ambos son igualmente VERDADEROS.
Gracias a @ms,
¿Podría explicar cómo lee jmp N fila ( Repite ) + N fila ( Saltos ) como una expresión de prueba?
¿Es equivalente a:
O ( N fila ( Repite ) , N fila ( Saltos )) > 0
ron
Podrías probar un bucle while. El siguiente bucle debería detenerse cuando tanto la repetición como los saltos son matrices vacías.
Saltos = Repite = El 1 ] ;
Mientras ( N fila ( Repite ) + N fila ( Saltos ) ,
Repite = dt << obtener filas donde ( Retraso ( : Temperatura , 1 ) == : Temperatura ) ;
dt << eliminar filas ( repite ) ;
Saltos = dt << obtener filas donde ( Y ( Retraso ( : Temperatura , 1 ) == Retraso ( : Temperatura , - 1 ) , : Duración < 2 )) ;
dt << eliminar filas ( Saltos ) ;
) ;