Mantenga las columnas que coinciden con una lista, elimine el restoHola -
Me gustaría eliminar columnas (según los nombres de las columnas) de una tabla de datos que no no emparejar una lista. He seguido el código JSL hasta ahora, pero no funciona.
Entrada apreciada.
Names Default To Here( 1 );
bigClass = Open( "$SAMPLE_DATA/Big Class.JMP" );
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
For(j = 1, j <= N Items( col_of_interest ), j++,
For( i = N Items( col_names ), i > 0, i--,
if ( not( col_names[i] == col_of_interest[j],
Remove From( col_names, i ))
);
);
);
dtNew = dt << subset( all rows, columns( col_names ) ); Wait( 0 );
secuencias de comandosventanasRe: Mantener columnas que coincidan con una lista, eliminar el restoDe hecho, JMP no confundirá la variable j y la función J() porque cuando usa el nombre de una función, debe ir seguido de paréntesis, o tendrá el alcance de otra cosa, como una variable si ese nombre existe.
¡Pero tomo su advertencia en serio en general porque los nombres son importantes en JSL!
Re: Mantener columnas que coincidan con una lista, eliminar el restoOtra opción si usa JMP 16:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
//list of columns to include
col_of_interest = {"name", "age", "weight", "does not exist"};
// Option 1 - subset table
// Filter out columns in the list that aren't in the table and subset
cols_checked = filter each({cn}, dt << Get Column Names( String ), n items(loc( col_of_interest, cn ))>0);
dtNew = dt << subset( all rows, columns( cols_checked ) );
// Option 2 - delete columns from original table
for each({c}, dt << get column references, if( n items( loc( col_of_interest, c << get name ) ) == 0, dt << delete columns(c) ) );Re: Mantener columnas que coincidan con una lista, eliminar el restoGracias por la entrada y el consejo sobre la función matricial J, jthi. Déjame volver a intentarlo.
Re: Mantener columnas que coincidan con una lista, eliminar el restoCuando comparo dos listas, me resulta más fácil hacer una tercera lista que contenga los resultados mientras trabajo con los bucles y luego uso la tercera lista para tomar medidas cuando se completa todo el bucle.El siguiente código puede lograr lo que está intentando.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
col_list = {};
For( i = N Items( col_names ), i > 0, i--,
if(contains(col_of_interest, col_names[i]),
insert into(col_list, col_names[i])
);
);
dtNew = dt << subset( all rows, columns( col_list ) );
Wait( 0 );
Re: Mantener columnas que coincidan con una lista, eliminar el restoRecorrería todas las columnas de la tabla de datos y las eliminaría cuando fuera necesario (si desea mantener su idea, también puedo ayudar a depurar eso):
Names Default To Here(1);
bigClass = Open("$SAMPLE_DATA/Big Class.JMP");
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names(String);
For(i = 1, i <= N Items(col_names), i++,
If(!Contains(col_of_interest, col_names[i]),
dt << Delete Columns(col_names[i]);
);
);
Wait(0);También sugeriría no usar J como nombre de variable, ya que JMP tiene una función de matriz J().
Editar:
Además, no es necesario usar la tabla de datos actual () (y no debería) porque ya tiene la referencia después de abrir la tabla. También aquí está mi método preferido para eliminar columnas (usando una matriz asociativa para obtener solo las columnas adicionales y eliminarlas):
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.JMP");
col_of_interest = {"name", "age", "weight"};
//get columns which are "extra"
col_names_aa = Associative Array(dt << Get Column Names(String));
col_names_aa << Remove(Associative Array(col_of_interest));
col_names_to_remove = col_names_aa << get keys;
Show(col_names_to_remove);
dt << Delete Columns(col_names_to_remove);