¿Filtrar por fila, apilar columnas?Sé cómo hacer una tabla de subconjuntos según algunos criterios:
dt << Row Selection( Select where( (:Stat == "mean"), Current Selection( Extend )) );
dt << Select Columns( [10, 20] );
dt2 << Subset( Output Table( "test"), Selected Rows( 1 ), Selected columns( 1 ) );
Pero ahora necesito repetir lo anterior para múltiples criterios y apilar la selección, es decir, la nueva tabla tendrá la columna 10 como columna fija, y luego sigo agregando la columna 20 con solo las filas que coinciden con los criterios anteriores. El número de filas siempre será el mismo.
El comando "Apilar" no funciona con la selección, así que no estoy seguro de qué otros comandos pueden hacer eso.
Combinación y limpieza de datosRe: filtrar por fila, apilar columnas?A continuación, se muestra un ejemplo de una forma sencilla de eliminar las filas seleccionadas cuando se utiliza la plataforma Stack.
names default to here(1);
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Row Selection( Select where( (:Sex=="F"), Current Selection( "Extend" )) );
// Stack data table
dtStack = dt << Stack(
columns( :height, :weight ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << delete rows;
Re: filtrar por fila, apilar columnas?(Pulsa aceptar como solución por error)
Gracias, pero no quiero eliminar las filas seleccionadas. Puedo encargarme de eso, pero ¿cómo agregaría la selección cuando use Stack?Re: filtrar por fila, apilar columnas?Así es como pensé que se puede hacer (pero no funciona):
my_list = {"F0","F1"};
stackcols = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( stackcols, dt )
);
dt2 << Subset( Output Table( "aa"), Selected Rows( 1 ), Selected columns( 1 ) );Básicamente, filtro la tabla activa según la columna "Freq", primero por el valor "F0" y luego por "F1". Este se encuentra en la Columna 19. Agrego esa selección a la lista de selección llamada 'stackcols'. Entonces, después del ciclo, espero que esta sea una lista de dos columnas. Entonces quiero hacer una mesa con ella (llamada "aa"). Pero no está funcionando.
Re: filtrar por fila, apilar columnas?Ah ..... tiene razón acerca de eliminar las filas seleccionadas.Pero para eliminar los no seleccionados, solo use
dtStack << Invert Row Selection;
y luego borre las filas.
Para agregar varias tablas de datos apilados independientes, simplemente:
- Antes de iniciar las instancias de pila repetidas, cree una tabla de datos base vacía que terminará con todas las tablas apiladas concatenadas.
dtBase = New Table("Base");
- Luego, para cada una de las tablas apiladas que cree,
- Elimine las filas que no desea de la tabla de datos apilados
- Concatenar la tabla apilada a la tabla base
dtBase << Concatenate( dtStacked );
- Eliminar la tabla apilada
Close( dtStacked, nosave );
Re: filtrar por fila, apilar columnas?Gracias, pero no funcionó:
dt = current data table();
my_list = {"F0","F1"};
dtBase = New Table("Base");
dtStacked = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( dtStacked, dt );
dtBase << Concatenate( dtStacked );
Close( dtStacked, nosave );
);dtBase está vacío.