Eliminación de filas duplicadas de la tabla actualHola,
Tengo 256k filas en una tabla principal en este momento. Mientras hacía un análisis, descubrí que tengo pocas filas duplicadas. Esta tabla constantemente obtiene nuevos datos modificados a través de un script. Y existe la posibilidad de que los datos de origen se hayan duplicado nuevamente.
Así que estoy tratando de crear un script de limpieza que pueda ejecutar antes de ejecutar parte de mi análisis. Busqué otras discusiones aquí y encontré una solución ( https://community.jmp.com/t5/Discussions/Eliminating-Duplicate-Rows-keeping-first-duplicate/td-p/3424 ), que personalicé para mi aplicación
dt3 = Current Data Table();
dt2 = dt3 << Summary(
group(:CL1, :CL2, :CL3, :CL4)
);
dt3 << join(
with (dt2),
update,
by matching columns (
:CL1 = :CL1,
:CL2 = :CL2,
:CL3 = :CL3,
:CL4 = :CL5
),
drop multiples(1,0),
name("include non-matches")(0,0),
preserve main table order (1),
);
Esta solución hizo lo que estaba buscando. Sin embargo, no puede actualizar la tabla principal. Crea una nueva tabla con las filas correctas, pero mi tabla principal no ha cambiado. ¿Cómo puedo usar este código en mi tabla principal para eliminar filas de la tabla principal, que en este caso es "Tabla de datos de Currnet()".
Además, (ya lo sé, pero quería confirmarlo), tengo 25 columnas en mi conjunto de datos. ¿Debería ejecutar el script anterior para que coincida con las 25 columnas para que sea preciso o, siempre que tenga una columna de tiempo, puedo ejecutar menos columnas (como 4 por ejemplo anterior)? No quería ralentizar el script ya que tendría una gran cantidad de datos en el archivo JMP.
¡Gracias por adelantado!
Re: Eliminar Filas Duplicadas de la Tabla ActualGracias GZMORGAN0,
Pude usar su metodología para eliminar cualquier duplicado. Se creó una nueva columna con la fórmula DIF. Luego, usando la columna de tiempo ordenado por script, seleccionó cualquier cero (diff = 0 que significa fila duplicada) y eliminó los duplicados.Re: Eliminar Filas Duplicadas de la Tabla ActualNiiD,
Si el tiempo es su identificador principal, una opción es crear una nueva columna para Dif(:fechahora,1) u obtener filas donde Dif(:Datetime,1) ==0 debería ser un duplicado. Sin embargo, si puede haber registros con la misma fecha y hora, pero diferentes herramientas u otros identificadores, ordene por esos identificadores y Fecha y hora y luego obtenga filas donde o seleccione donde identificador == Lag (identificador, 1) & Dif (: Fecha y hora, 1) ) ==0. Luego elimine esas filas.
Re: Eliminar Filas Duplicadas de la Tabla Actual¡Gracias! Intentaré usar tu código para ver si puedo adaptarlo.
Tengo una columna de tiempo, que puedo usar para ordenar para obtener filas idénticas una al lado de la otra. Todas las demás columnas son datos de proceso reales, por lo que no hay duplicados (aparte de los identificadores de proceso como el nombre del producto, el tipo de producto). Pero la columna de tiempo se puede usar para ordenar y tener filas idénticas una al lado de la otra. entonces la pregunta se convierte en seleccionar uno de la fila idéntica.
Descubrí que JMP 14 tiene una nueva función, pero no es compatible con JMP 13 (mi versión). Entonces, tal vez si hay un código pequeño y fácil para seleccionar una fila duplicada (una de dos entradas), simplemente puedo eliminarlos.
dt3 = Data Table( "ProcessDataTable" ) << Select Duplicate Rows();
Antecedentes sobre duplicados: mi secuencia de comandos extrae datos de un archivo CSV que se genera semanalmente, que se importa a la tabla maestra de JMP. Los datos semanales tienen siete días desde el momento en que se generaron. Entonces, si durante una semana el CSV se generó el lunes a las 12:00 p. m. y la próxima semana se generó el lunes a las 8:00 a. m., entonces podría haber un duplicado de tres horas.
Eso es lo que busco excluir una vez que los datos ingresan a JMP. No existe la posibilidad de eliminar el duplicado antes de que llegue a JMP, por lo que espero una solución en JMP.
Re: Eliminar Filas Duplicadas de la Tabla ActualNiiD,
Le falta información clave sobre sus datos: ¿hay una o varias columnas que deberían representar un registro único? Por ejemplo:
- una línea de fabricación de varios pasos, como los semiconductores, normalmente usaría columnas Lot#, Wafer#, Operation#, Equip ID y Datetime
- un estudio de fármacos de medidas repetidas: ID del sujeto y fecha y hora
- etc.
Entonces, si estas columnas deben representar registros únicos (claves), entonces otras columnas no deberían importar y debe decidir si desea conservar el primer o el último registro.En otras palabras, ¿su orden de mesa proporciona información sobre los duplicados? Por ejemplo, las bases de datos a menudo se ordenan de más reciente a más antigua.
El script adjunto crea una tabla de 256k filas únicas y 25 columnas. Selecciona aleatoriamente 200 filas. Los primeros 100 se duplican una vez que los segundos 100 se duplican dos veces, y el orden de la mesa se baraja. Entonces ahora hay 256,300 filas.
Fue creado con 2 columnas de cadena y 2 columnas de enteros, por lo que 4 columnas representan las claves únicas.Y este script mantiene la fila más alta en la tabla. Las tablas intermedias se configuran como invisibles para probar el rendimiento sin tiempo de procesamiento. Sin embargo, para comprender qué está haciendo el código, es posible que desee convertirlos para que sean visibles.
He ejecutado esto 6 veces y cada una tomó 2.0x segundos en mi PC.El tiempo variará dependiendo del número de duplicados.
El script encuentra las filas para eliminar trabajando solo en las filas duplicadas que deberían ser mucho más pequeñas que 256k.
nota final En lugar de eliminar esas filas de su tabla principal, es posible que desee excluirlas o mantener una columna de Conservar o Guardar para que pueda restablecer los estados de fila para excluirlas.
¡Buena suerte!