Matriz asociativa para cambiar el nombre de las columnas de la tabla de datosHola, comunidad de JMP:
Tengo una tabla de datos (dt1) con muchas columnas y me gustaría cambiarles el nombre. Están codificados con nombres extraños. Pero tengo otra tabla de datos (dt2) con solo dos columnas: Nombre y: Código. Cada fila en dt2 tiene el nombre significativo que está asociado con el código.
Sé cómo hacer esto con bucles for, pero estoy tratando de aprender algo nuevo y espero hacerlo a través de una matriz asociativa. Algo similar a lo que hay en este hilo. aquí . Pensé que podía hacer algo como esto:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
Pero, desafortunadamente, esto no funciona. No se esta comportando como yo pensamiento se comportaron las matrices asociativas.
Nuevamente, quiero intentar aprender algo nuevo y mejorar con un nuevo comando JSL, por lo que quiero trabajar a través de Associative Array. Si no es posible, lo haré a la manera de For-Loop de fuerza bruta.
¡Gracias por cualquier comentario y comentario sobre esto!
DS
Tabla de datosScriptingRe: matriz asociativa para cambiar el nombre de las columnas de la tabla de datosEl uso de matrices asociadas y bucles for no se excluyen mutuamente.Sé que a mucha gente le gusta evitar los bucles for, pero al final del día, desea iterar sobre las columnas de una tabla y los bucles for están diseñados para realizar iteraciones.
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>Re: matriz asociativa para cambiar el nombre de las columnas de la tabla de datosHola @David_Burnham ,
Gracias por tus comentarios. Claramente necesito leer más en matrices asociativas. No me importa tanto For Loops, pero esperaba codificar el cambio de nombre de una manera más elegante. El enlace al otro hilo fue una solución muy elegante para reordenar los valores de columna en función de la entrada numérica de otra columna. La forma en que funcionó la matriz asociativa en ese script fue cómo pensé que funcionaría para las columnas de la tabla, pero claramente no es así. Hice cambios de nombre de columnas con For Loops en el pasado usando listas {...}, pero estaba buscando probar una forma diferente sin bucles. Sin embargo, me gusta el método de matriz asociativa que presentó y lo haré de esa manera en lugar de crear listas.
Supongo que estaba pensando que con una lista de los nombres de columna en la primera tabla de datos y la matriz asociativa de la segunda tabla de datos, uno podría reasignar fácilmente los nombres debido a la matriz asociativa, casi como una función de "recodificación" para la columna. nombres.
De todos modos, agradezco su respuesta y solución a mi pregunta sobre el uso de matrices asociativas para cambiar el nombre de las columnas. ¡Es hora de volver a los datos!
¡Gracias!,
DS
Re: matriz asociativa para cambiar el nombre de las columnas de la tabla de datosPara que quede claro, codifiqué el contenido de la matriz solo para tener un ejemplo de trabajo; todavía tiene sentido completar las claves y los valores de una tabla separada.Tenga en cuenta también que no había necesidad de ninguno de los Evals, Expr's, etc. Buena suerte.
Re: matriz asociativa para cambiar el nombre de las columnas de la tabla de datosHola @David_Burnham ,
Sí, seguí tu ejemplo y entendí la codificación. Al trabajar con otra tabla de columnas Nombre y Código, fue fácil crear la matriz asociativa (nota: debe estar en el orden correcto) para que al configurar los nombres de las columnas, aplique el valor correcto a la clave coincidente. Lo ejecuté y funcionó perfectamente. ¡De nuevo, gracias por la ayuda!
DS