¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?Hola,
Tengo una tabla de datos con experimentos continuos que se repiten. Por lo tanto, los datos ya están apilados. Tengo una columna donde cada nuevo experimento empieza con 1, luego con 2, y así sucesivamente hasta la última medición. Quiero crear una nueva columna con el número de experimento, de modo que cada vez que la otra columna empiece con 1, ese sea el inicio de otro experimento.
He intentado escribir este script con la ayuda de IA, pero no funciona. Espero que alguien pueda ayudarme.
dt = Tabla de datos actual();
// Columna utilizada para identificar nuevos experimentos
experimentIdentifier = Column(dt, "Column1"); // Es la Columna1 la que contiene números del 1 al 100 que se repiten una y otra vez.
// Crear una nueva columna para los números de muestra
dt << Nueva columna("NúmeroDeMuestra", Numérico);
// Inicializar variables
experimentoActual = IdentificadorExperimento[1];
sampleNumber = 1;
// Iterar sobre cada fila usando indexación de fila explícita
Para (i = 1, i <= N Fila(dt), i++,
Si (experimentoIdentificador[i] != experimentoActual,
// Se inicia un nuevo experimento, restablece el número de muestra
experimentoActual = IdentificadorExperimento[i];
sampleNumber = 1;
,
// De lo contrario, incremente el número de muestra
sampleNumber++;
);
// Asignar número de muestra a la nueva columna
dt:NúmeroDeMuestra[i] = NúmeroDeMuestra;
);
Automatización y scriptingCombinación y limpieza de datosRe: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?Crea una nueva columna y establece esto como fórmula:
Col Cumulative Sum( 1, :Column 1 )
La columna 1 es la columna que contiene los números de medición.
Pedo mental.
Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?Length( Loc( :Column 1[1 :: Row()], 1 ) )
Esa fórmula funciona.
Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?Puedes usar Col Cumulative Sum(), pero no es tan atractivo.
Col Cumulative Sum( If( :Column 1 == 1, :Column 1, 0 ) )
Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?No entiendo cómo usar esto en un script.
También he probado esto, pero hasta ahora todas las filas de mi nueva columna tienen un valor de 1. ¿Puedes ver lo que no está funcionando?
dt = datos actuales Tabla() << Nueva Columna("Número de Experimento",
Numérico,
Fórmula(
Si (Row() == 1, 1, // Inicializa el número de experimento como 1 para la primera fila
Si( :Número de punto == 1 y Retraso(:Número de punto) != 1, Retraso(:Número de experimento) + 1, // Incrementa el número de experimento si el "Número de punto" se restablece a 1
Lag(:Experimento No, 1) // De lo contrario, mantenga el mismo número de experimento
)
)
)
);
Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?Hola @WhiteCow2000 ,
Lo intenté tomando la posición donde aparece el '1', marcando cada uno con un número creciente y luego copiando la opción "Rellenar > Reemplazar faltante con el valor anterior", que se puede hacer manualmente en JMP. Agregué una ventana para seleccionar la columna que se va a medir para mayor flexibilidad.
Names Default To Here( 1 );
dt = current data Table ();
dt << Clear Column Selection();
//This will work to find the instance where the lowest number (1 in this case) appears in the row order, if the rows are sorted in any way then it will adapt to that so be careful.
//Window to select the column with repeats
nw = New Window( "Launch Dialog",
<<MODAL></MODAL>
<P>La versión simple del script donde escribirías los nombres exactos de las columnas en JSL está aquí:<BR /><BR /></P>
<CODE class=" language-jsl">Names Default To Here( 1 );
dt = current data Table ();
//This will work to find the instance where the lowest number (1 in this case) appears in the row order, if the rows are sorted in any way
//Window to select the column with repeats
//Add a column to track experiment number
dt<<NEW column=""></NEW>
Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?La IA es bastante mala con JSL. Aplicar mi solución es sencillo. Además, probé tu última fórmula y funcionó bien.
dt = New Table( New Column( "Point No.", Set Values( Repeat( 1 :: 100, 4 ) ) ) );
dt << New Column( "Experiment No", Numeric, Formula( Length( Loc( :Point No.[1 :: Row()], 1 ) ) ) );
dt << New Column( "Experiment No", Numeric, Formula( Col Cumulative Sum( If( :Point No. == 1, :Point No., 1, 0 ) ) ) );
dt << New Column( "Experiment No",
Numeric,
Formula(
If( Row() == 1,
1, // Initialize experiment number as 1 for the first row
If( :Point No. == 1<SPAN> & Lag(:Point No.) != 1</SPAN>,
Lag( :Experiment No ) + 1, // Increment experiment number if "Point No." resets to 1
Lag( :Experiment No, 1 ) // Otherwise, keep the same experiment number
)
)
)
);

Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?¡Muchas gracias por toda su ayuda! ¡Ahora funciona tanto con la fórmula Si como con la fórmula Longitud!
Re: ¿Cómo crear una nueva columna con el número de experimento en una tabla de datos con datos continuos repetidos apilados?Volviendo a este hilo unas semanas más tarde para compartir una buena solución a un problema similar, que creo que podría funcionar mejor con una fórmula más simple:
Resuelto: Cómo obtener una nueva columna para completar ciclos en un conjunto de datos grande para múltiples ciclos o... - Comunidad de usuarios de JMP