Cómo ordenar columnas y eliminar filas repetidas<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Es nuevo en las secuencias de comandos en JMP y desea filtrar la tabla de errores de herramientas. Tengo un conjunto de datos y quiero filtrar por fecha de alarma y luego eliminar las filas repetidas de errores. Por ejemplo, si se produce un error a la 1:00 y se repite 4 veces en 1 hora, quiero eliminar las repeticiones y solo se detecta cuando aparece el error por primera vez.
Mi secuencia de comandos está a continuación y quiero volver a ejecutar la secuencia de comandos después de eliminar las filas repetidas por fecha de alarma (descendente).
dt = abierto ("SR_Loop_LAM_002_Alarm_Log.csv");
dt << ordenar (por (:ENTIDAD), orden (ascendente), reemplazar tabla (0));
para (i = nrows (dt), i>0, i--,
if(:ENTIDAD[i-1]==:ENTIDAD & :ALARM_ID[i-1] == :ALARM_ID & diferencia de fecha(:ALARM_DATE[i-1], :ALARM_DATE , "hora", "fraccional") < 1,
dt << eliminar filas (i))
);
dt << guardar ("SR_Loop_LAM_002_Alarm_Log.csv");
cerrar (dt, sin guardar)
Re: Cómo ordenar columnas y eliminar filas repetidas¡Gracias a todos por la gran respuesta! He editado mi script y ahora funciona maravillosamente.
Re: Cómo ordenar columnas y eliminar filas repetidasHola Evan,
Hay varias formas de evitarlo.Existe un desafío específico con la eliminación de duplicados, ya que desea eliminar los "duplicados" que ocurren dentro de una hora después de la misma alarma.Esto requiere una lógica de función de retraso, que a su vez requiere que los datos se ordenen adecuadamente antes de la ejecución.Además, si elimina una fila antes de la ejecución de la siguiente lógica, podría terminar con errores fuera de límites en el bucle.Una solución alternativa es establecer un indicador para la eliminación de duplicados; esto se puede hacer creando una columna booleana o utilizando algunas funciones integradas.A continuación modifiqué su código para usar la selección de filas como esa bandera.Después de realizar la lógica para determinar si la alarma es un duplicado, todas las filas se eliminan a la vez.Se agrega más velocidad abriendo la mesa en modo invisible para evitar la E/S de pantalla.
/* tabla de datos hecha invisible para acelerar la ejecución */
dt = Abierto ( "SR_Loop_LAM_002_Alarm_Log.csv" , invisible ) ;
/* actualizado para clasificación múltiple */
dt << Clasificar ( Por ( : ENTIDAD , : ALARMA_FECHA ) , Orden ( Ascendente , Ascendente ) , Reemplazar tabla ( 0 ) ) ;
/* borrar primero la selección de filas y columnas (solo un buen hábito de codificación) */
dt << Borrar Seleccionar ;
dt << Borrar selección de columnas ;
/* seleccionar filas que cumplan las condiciones especificadas
Debido a que esto va de abajo hacia arriba, el bucle debe detenerse en la fila 1 (no hay fila 0)
*/
Para ( i = N filas ( dt ) , i > 1 , i --,
Si (
: ENTIDAD [ i - 1 ] == : ENTIDAD [ i ] &
: ALARMA_ID [ i - 1 ] == : ALARMA_ID [ i ] &
Diferencia de fecha ( : ALARMA_FECHA [ i - 1 ] , : ALARMA_FECHA [ i ] , "hora" , "fraccionario" ) < 1 ,
dt << Seleccionar filas ( i )
)
) ;
/* eliminar las filas seleccionadas */
dt << Eliminar filas ;
/* clasificación final */
dt << Clasificar ( Por ( \ : ALARMA_FECHA ) , Orden ( Delaware ascendiendo ) , Reemplazar tabla ( 0 ) ) ;
dt << ahorrar ( "SR_Loop_LAM_002_Alarm_Log_cleansed.csv" ) ;
Cerca ( dt , no guardar ) ;
Re: Cómo ordenar columnas y eliminar filas repetidasHola evanchen870
Eche un vistazo a esta discusión del pasado. El script también es muy rápido y sólido para eliminar, ya que utiliza "obtener filas donde".
Re: Detener un bucle
¡buena suerte!
Re: Cómo ordenar columnas y eliminar filas repetidasSi utiliza la función Lag() no obtendrá ningún error.
lat(ENTIDAD ) apuntará a la columna (fila) para guardar como ENTIDAD[i-1]
Re: Cómo ordenar columnas y eliminar filas repetidasGracias por la rápida respuesta, Ian, pero el guión aún no hace lo que quiero.
Actualmente tengo las columnas ENTITY, ALARM_DATE, ENTITY_TYPE, ALARM_ID y ALARM_DESCRIPTION.
1. Primero quiero que mi script se ordene por ENTITY, ALARM_DATE o ENTITY_TYPE.
2. luego quiero usar un bucle if para eliminar alarmas repetidas (por ALARM_DESCRIPTION) dentro de 1 hora de diferencia horaria de ALARM_DATE
3. Por último, quiero ordenar por ALARM_DATE (descendente) para reemplazar la tabla original.
Entonces, según sus sugerencias, tendré que cambiar a (i = nrows (dt), i>1, i--)?
Re: Cómo ordenar columnas y eliminar filas repetidasParece que ya casi has llegado. Su bucle 'for' termina en el valor de i=1, pero está indexando i-1=0. Los subíndices JMP siempre comienzan desde 1.
Re: Cómo ordenar columnas y eliminar filas repetidasEl error JMP actual es "Número de fila no válido en el acceso o evaluación del 'subíndice', "ENTIDAD[i-1]"