Clasificación de la tabla de datos JMP y eliminación de filas en JMP Script<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola:
Soy un novato con JMP. Quiero ordenar y formatear una tabla de datos según las condiciones de las dos primeras columnas. La primera columna es una cadena de texto ("LaserID") y la segunda columna es la hora en que se toman los datos ("hora"). Mi objetivo es derivar otra tabla con exactamente el mismo número de columnas que la tabla original para que solo haya una fila de datos de un "LaserID" particular (es decir, sin repetición). La eliminación de múltiples filas con el mismo "LaserID" se basará en cuándo se toman los datos ("tiempo").
En otras palabras, la nueva tabla consistirá en una fila con un "LaserID" único con datos tomados en el último momento.
Adjunto la tabla Original y Final que quiero lograr. Cualquier ayuda para escribir un guión para esta tarea será apreciada.
Re: Ordenar tabla de datos JMP y eliminar filas en JMP ScriptHola David, estoy usando tu secuencia de comandos para eliminar duplicados también, pero tengo una pregunta: ¿qué pasa si mi columna (equivalente a columna "LaserID" en el ejemplo) es numérico y continuo? de alguna manera, la secuencia de comandos no funcionaría en mi caso... Si cambio las propiedades de la columna para que sea "carácter", entonces la secuencia de comandos funciona.
gracias.
Re: Ordenar tabla de datos JMP y eliminar filas en JMP ScriptHas recibido un par de respuestas de secuencias de comandos. Si desea hacer esto de forma interactiva, pruebe estos pasos.
Ordenar la tabla por identificación láser y Tiempo .

Luego cree una nueva columna con una fórmula para seleccionar las filas donde identificación láser en la fila actual no coincide con el identificación láser en la siguiente fila. Dado que la tabla está ordenada por identificación láser y Tiempo obtendrá la última fila de cada serie de LaserID.
El truco aquí es usar una columna con un tipo de datos de Estado de fila y el Estado seleccionado función de estado en la fórmula.
Elegir Cols -> Nueva Columna... y establezca el tipo de datos en Estado de fila .

Luego agrega un Fórmula.

Para la fórmula, comience con Estado de fila -> Estado seleccionado .

Luego coloque la comparación dentro de la función Selected State(). Esta comparación utiliza el Función de retraso () con un argumento -1 para comparar con el valor de identificación láser en la siguiente fila.

Ahora solo necesita copiar los estados de fila en su nueva columna al área de estado de fila activa haciendo clic en el ícono de estrella frente al nombre de la columna.

Ahora puedes usar Tablas->Subconjunto para crear un subconjunto de las filas seleccionadas.

¡Espero que eso ayude!
-Jeff
Re: Ordenar tabla de datos JMP y eliminar filas en JMP ScriptAquí hay un enfoque alternativo que usa tabular con max y luego actualizar:
dt1 = Tabla de datos ( "Inicial" ) ;
tab1 = dt1 << Tabular (
Mostrar panel de control ( 0 ) ,
Agregar tabla (
Tabla de columnas ( Columnas de análisis ( : tiempo ) , Estadísticas ( máx. ) ) ,
Tabla de filas ( Agrupar columnas ( : identificación láser ) )
) , invisible
) ;
dt2 = tab1 << Convertir en tabla de datos ;
tab1 << Cerrar ventana () ;
dt2 << Actualizar (
Con ( dt1 ) ,
Coincidencia de columnas ( : identificación láser = : identificación láser , : Nombre ( "Máx. (tiempo)" ) = : tiempo ) ,
Agregar columnas de la tabla de actualización (
: PPR ,
: Nombre ( "Potencia (W)" ) ,
: Nombre ( "Pmon (W)" ) ,
: PRF2 ,
: Nombre ( "Potencia2 (W)" ) ,
: Nombre ( "Pmon2 (W)" )
)
) ;
Re: Ordenar tabla de datos JMP y eliminar filas en JMP ScriptAlgo como esto debería hacerlo:
Obtener última fila = Función ({ dt , IDENTIFICACIÓN } , { Local predeterminado } ,
// ¡esto puede ser mucho más simple si asumimos el orden de fecha y hora!
// obtener solo aquellas filas que coincidan con la ID de láser especificada
lstRows = dt << Obtener filas donde ( : identificación láser == IDENTIFICACIÓN ) ;
//obtener los tiempos correspondientes como una lista
lstTimes = Columna ( dt , "Tiempo" )[ lstRows ] ;
// localizamos el tiempo máximo
ubicación = Loc máx. ( lstTimes ) ;
// devuelve la fila que contiene el tiempo máximo
lstRows [ ubicación ]
) ;
//tabla de datos fuente
dt = Tabla de datos ( "Inicial" ) ;
// obtener una lista de valores únicos para Laser ID
Resumir ( lstIDs = Por ( : identificación láser )) ;
// crea una mesa final vacía
nuevoDt = dt << Subconjunto ( Copiar fórmulas ( 0 )) ;
nuevoDt << Seleccionar todas las filas ;
nuevoDt << Eliminar filas ;
nuevoDt << Escoger un nombre ( "Final" ) ;
// crea una fila para cada resultado
Columna ( nuevoDt , "Identificación láser" ) << Establecer valores ( lstIDs ) ;
//iterar a través de cada ID para encontrar la fila con la fecha más reciente
Para ( i = 1 , i <= Nartículos ( lstIDs ) , i ++,
identificación actual = lstIDs [ i ] ;
r = Obtener última fila ( dt , identificación actual ) ;
espectáculo ( r ) ;
//coloca los valores de la fila r en la nueva tabla de datos
Para ( C = 1 , C <= NCols ( dt ) , C ++,
Columna ( nuevoDt , C )[ i ] = Columna ( dt , C )[ r ]
)
) ;