Eliminar filas con uno o más valores vacíos usando JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo una tabla donde cada fila contiene un único tipo de medición a tres temperaturas, cada una almacenada en su propia columna. En última instancia, quiero calcular los deltas entre estas medidas y luego apilar esos datos en una nueva tabla. Sin embargo, no todas las mediciones se toman a las tres temperaturas y necesito excluir aquellas mediciones (filas) donde una o más de las columnas de datos están vacías. Necesito hacer esto usando un script JMP 9.0.
Dado:
dtDividir =
| Medición | T1 | T2 | T3 |
|---|
| Medida A | 5 | 12 | 89 |
| Medida B | 13 | | 8 |
| Medida C | | 52 | 57 |
| Medida D | 22 | 21 | |
| Medida E | 8 | | |
| Medida F | | | 15 |
| Medida G | | 54 | |
Necesito producir:
dtLimpiar =
| Medición | T1 | T2 | T3 |
|---|
| Medida A | 5 | 12 | 89 |
Estaba intentando usar algo como:
dtSplit << Select Where(
Is Empty(:T1) ||
Is Empty(:T2) ||
is Empty(:T3)
) << Delete Rows;
Sin embargo, cualquier Seleccionar dónde (está vacío (: COL)) siempre selecciona todas las filas.
Estoy seguro de que me falta algo simple, se agradece mucho su ayuda, gracias.
- mate
Re: Eliminar filas con uno o más valores vacíos usando JSLHola
Gracias por el aporte. Revisé el patrón de datos faltantes que recomendó y en cierto modo funciona, pero no del todo.
En mi tabla de datos, cada nombre tiene 4 filas diferentes. Cada una de las 4 filas de un nombre es el resultado de 1 prueba (sensores, máscara, EVM y potencia)
En mi ejemplo de tabla de datos, el dispositivo A no pasa la primera prueba "Sens" y pasa la segunda, tercera y cuarta prueba. Debido a que el dispositivo A falla en "Sens", este es un dispositivo fallido aunque pase la segunda, tercera y cuarta prueba.
Si uso Tablas ==> Patrón de datos faltantes, se eliminarán las filas 2, 3 y 4 de A. Que no es lo que estoy buscando. Quiero eliminar 4 filas de cada nombre cuando no hay datos sobre ellas (no hay datos en 10 MHz, 20 MHz, 30 MHz y 1000 MHz). En mi tabla de datos, se eliminarán los nombres C, G, H, I, JK y N.
Gracias por tu ayuda
Re: Eliminar filas con uno o más valores vacíos usando JSLDebes consultar la plataforma Patrón de datos faltantes. forma.Le permitirá identificar todas las filas a las que les faltan todos los valores y luego podrá optar por eliminar las filas, etc.
Tablas==>Patrón de datos faltantes
Re: Eliminar filas con uno o más valores vacíos usando JSLHOLA
Esta es mi primera publicación y no estoy seguro si el archivo Excel adjunto se procesa o no. Si no,
También adjunto el PNG del archivo de datos de muestra.
Soy muy nuevo en JMP (estoy usando JMP 14) y necesito ayuda con el script de eliminación de filas.
Mi tabla de datos contiene datos de muchos dispositivos diferentes donde se prueba cada dispositivo
cuatro fallas diferentes (sensibilidad, máscara, EVM y energía) en un amplio rango de frecuencia
desde 10MHz hasta 1000Mhz. Los dispositivos de paso son los que tienen celdas vacías "" para los cuatro
Pruebe en rangos de frecuencia y me gustaría eliminarlos de la tabla de datos.
(elimine las filas en verde del archivo Excel adjunto: dispositivos C, G, H, I, J, K y N)
1er Problema: Cómo eliminar filas vacías (con columnas de 10 MHz a 1000 MHz = vacías)
El siguiente comando que encontré es similar pero no útil porque tengo 100 columnas diferentes y "y"
sacarlos todos es bastante largo y no escalable si luego decidiéramos aumentar la frecuencia
más allá de 1000 MHz
dtsplit << Seleccionar dónde(Falta(:T1) | Falta(:T2) | Falta(:T3)) << Eliminar filas;
También probé este comando:
Para (i = 2, i <= 101, i++,
dtSplit << seleccionar dónde (falta (columna (i) [])) << eliminar filas
);
Este comando me da un error:
En el siguiente script, error marcado por /*###*/
dt = Tabla de datos actual();
Para (i = 2, i <= 100, i++,
dtSplit/*###*/ < );
Segundo problema: las filas eliminadas deben ser múltiplos de 4, ya que cada dispositivo se prueba 4 veces.
No estoy exactamente seguro de cómo hacer eso.
Realmente agradecería su ayuda en esto.
Gracias
nuevo_2_JMP
Re: Eliminar filas con uno o más valores vacíos usando JSLSi solo estás marcando una sola celda:
if ( Is Missing( Column( dt,"Value" )[7] ),
dt << delete rows([7]);
);
Re: Eliminar filas con uno o más valores vacíos usando JSLSu código solo verifica la fila 7. Debe probar cada fila
dt << select where( Is Missing( Column( dt,"weight" )[row()] ) ) << delete rows;
Re: Eliminar filas con uno o más valores vacíos usando JSLHola,
Estoy intentando hacer un poco lo mismo.
Necesito verificar si una celda está vacía y luego eliminar la fila en caso afirmativo.
Intenté lo siguiente:
dt << seleccionar dónde( Falta( Columna( dt,"Valor" )[7] ) ) << eliminar filas;
Pero elimina todas las filas de la tabla.
Buscando ideas.
Re: Eliminar filas con uno o más valores vacíos usando JSLGran discusión. Tuvimos un problema similar: al importar desde archivos de sensores teníamos muchas filas vacías al final del archivo. Queríamos eliminar filas donde no se encontraban datos del sensor. Sin embargo, no quería eliminar filas donde todavía había información.A continuación se escribió en JMP14, pero creo que funcionará para versiones anteriores. En JMP14, sé que hay Selección de filas > Seleccionar filas duplicadas. Pero no pude encontrar una función similar que sumara todas las columnas numéricas en una fila. En el siguiente script, Sum() devolvería un valor nulo en la fila de la matriz, pero yo quería un cero. Encontré que la salida de V Sum() devolvería 0 para todos los valores nulos. Para que funcione, solo tuve que transponer el vector fila a un vector columna.Esto funciona sin importar cuántas columnas numéricas tenga, siempre que estén todas vacías. Todavía estoy interesado si alguien tiene una solución mejor.
dt = Current Data Table();
// Get all numeric data
m = dt << Get As Matrix;
// for each row, test if the V Sum is 0 or non-zero
// V Sum returns 0 for all null
// Sum() returns null for all null
rowlist = {};
For(i= N Rows(m), i>=1,i--,
If(V Sum(Transpose(m[i,0]))[1] == 0,
Insert Into(rowlist,i)
)
);
dt << Delete Rows(rowlist);Re: Eliminar filas con uno o más valores vacíos usando JSLUsar el operador de concatenación fue un error de transcripción: los viejos hábitos cuestan morir.
Resulta que el problema eran los nombres de mis columnas, que en realidad eran '88', '95' y '105', y usando Is Missing(:88) seleccioné todas las filas.
dtsplit << Select Where(Is missing(:Name("T1")) | Is missing(:Name("T2")) | is missing(:Name("T3"))) << Delete Rows;
Funciona genial.
Re: Eliminar filas con uno o más valores vacíos usando JSLEstabas usando el operador de concatenación de cadenas || en lugar del operador O |.Como mostró MS, debe utilizar la función Falta y no Está vacío.Tu código se convierte en:
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << Delete Rows;
Re: Eliminar filas con uno o más valores vacíos usando JSLLo siento, no cumplí el requisito JMP9. La función Loc Nonmissing() parece ser nueva en JMP 10, por lo que lo anterior no funciona en JMP 9.
Aquí hay un enfoque alternativo que funciona en JMP 9, similar a su código pero usando un bucle.
For( i = 2, i <= 4, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << delete rows
);
Re: Eliminar filas con uno o más valores vacíos usando JSLEsto se puede lograr de diferentes maneras. Para columnas numéricas, las funciones matriciales suelen ser efectivas.
A continuación se muestra un ejemplo de eliminación de todas las filas a las que les faltan celdas en las columnas 2, 3 y 4:
keeprows = Loc Nonmissing( dtSplit << get as matrix( {2, 3, 4} ) );
dtSplit << select rows( keeprows ) << invert Row Selection << delete rows;
Aquí hay un enfoque alternativo para crear un subconjunto de columnas sin celdas faltantes (manteniendo la tabla original sin cambios):
dtClean = dtSplit << Clear Column Selection() << subset( rows( Loc Nonmissing( dt << get as matrix( {2, 3, 4} ) ) ) );Re: Eliminar filas con uno o más valores vacíos usando JSLEste script comenzará a funcionar después de la columna titulada "Nombres" y continuará hasta el final de la tabla eliminando las filas vacías.
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = N Items(cnmes);
// Find the index of the "Device 2" column
For(k = 1, k <= N Items(cnmes), k++,
If(Contains(cnmes[k], "Names"),
Start = k + 1;
Break(); // Exit loop once found
);
);
// Loop through the columns from Start to End and delete rows with missing values
For(i = Start, i <= End, i++,
dt << Select Where(Is Missing(Column(i)[])) << Delete Rows;
);