Matriz asociativa para cambiar el nombre de las columnas de la tabla de datosHola comunidad 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 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 podrí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 es comportarse como yo pensamiento las matrices asociativas se comportaron.
Una vez más, quiero intentar aprender algo nuevo y mejorar con un nuevo comando JSL, por lo que quiero trabajar a través de la matriz asociativa. Si no es posible, lo haré de la manera For-Loop de fuerza bruta.
¡Gracias por cualquier comentario y comentario sobre esto!,
SD
Tabla de datossecuencias de comandosRe: 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 de 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!
SD
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 hubo 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 ,
Gracias por tus comentarios. Claramente necesito leer más en matrices asociativas. No me importa mucho 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 las columnas en función de la entrada numérica de otra columna. La forma en que la matriz asociativa funcionó en ese script fue como pensé que funcionaría para las columnas de la tabla, pero claramente no es así. He hecho 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!,
SD
Re: 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 quieres iterar sobre las columnas de una tabla y los bucles for están diseñados para iterar.
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>