Copie el subconjunto de columnas o el rango de celdas de una tabla a otraTengo dos tablas de datos. Algunas columnas de la tabla 2 son idénticas a las columnas de la tabla 1.
No debía copiar los datos de las columnas idénticas de la tabla 2 a la tabla 1.
Eso significa, por supuesto, que (1) la tabla 1 se expandirá con el número o las filas de la tabla 2 y (2) faltarán datos en la tabla 1. Está bien.
Mi problema es cómo copiar los datos de table2 a table1.
Por ejemplo, ambas tablas tienen la columna "NOMBRE". Table1 tiene 1000 filas, table2 tiene 2000 filas.
Los resultados serán: tabla1 con 3000 filas y "NOMBRE" en la tabla1 será una "concatenación" de ambas columnas NOMBRE. Otras columnas en la tabla 1 tendrán 2000 datos faltantes/vacíos.
Por cierto, en realidad, las tablas son mucho más grandes y hay 10-20 columnas idénticas (de ~100). Me ocuparé de eso una vez que descubra la función básica. Lo menciono en caso de que haya un problema con tal tamaño.
Muchas gracias
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaAlgo no funcionó para mí con el ejemplo.
Pero, no importa, capté la idea y pareció funcionar ejecutando una prueba en algunos archivos de entrada.
Parece que compliqué las cosas innecesariamente mientras tenía un camino directo delante de mis narices.
Gracias por su paciencia
Re: Copiar subconjunto de columna o rango de celdas de tabla a tabla
@RonB escribió:
Sí, lo entiendo. Pero la estructura de datos con la que estoy tratando requiere copiar también columnas en Big Class que no tienen el mismo nombre en Fitness. Es decir, estas columnas se "concatenarán verticalmente" a la tabla de salida como nuevas columnas. Estas columnas comenzarán con los datos faltantes (tantas filas como haya en Fitness) seguidas de los datos de Big Class.
¿En qué se diferencia esto de simplemente concatenar las dos tablas para empezar? Al hacerlo, obtendrá una tabla con todas las filas y todas las columnas de ambas tablas. Las columnas que no tienen nombres coincidentes en ambas tablas estarán vacías para las filas que originalmente no tenían esas columnas.
Dejemos de hablar en abstracto y seamos más concretos. Aquí hay dos tablas:
Tabla 1
Tabla 2
Usando Tablas->Concatenar en estas dos tablas, terminará con esta tabla.
Tabla 3
| A |
B |
C |
D |
| 1 |
1 |
1
|
• |
| 2 |
2 |
2 |
• |
| 3 |
3 |
3 |
• |
| 4 |
4 |
• |
4 |
| 5 |
5 |
• |
5 |
| 6 |
6 |
• |
6 |
La forma en que interpreto su descripción anterior me hace pensar que esa es la mesa que desea. Si no es así, lo siento, no entendí bien tu requerimiento.
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaSí, lo entiendo. Pero la estructura de datos con la que estoy tratando requiere copiar también columnas en Big Class que no tienen el mismo nombre en Fitness. Es decir, estas columnas se "concatenarán verticalmente" a la tabla de salida como nuevas columnas. Estas columnas comenzarán con los datos faltantes (tantas filas como haya en Fitness) seguidas de los datos de Big Class.
Creo que puedo hacerlo agregando primero a Fitness nuevas columnas con todos los nombres en Big Class que son diferentes. Luego use el mismo método que me mostró, subdividiendo Big Class con solo estas columnas y haciendo la concatenación.
Es mucho trabajo, pero no veo otra forma de lidiar con la gran cantidad de tablas y columnas que tengo.
gracias de nuevo
Re: Copiar subconjunto de columna o rango de celdas de tabla a tabla
@RonB escribió:
Ahora solo tengo que descubrir cómo copiar las columnas que no coinciden, pero creo que puedo manejarlo.
¿Columnas que no coinciden de qué tabla? El ejemplo anterior mantiene todas las columnas de la tabla Fitness y concatena solo las columnas que tienen el mismo nombre de Big Class. Para ello, solo subdivide Big Class para obtener las columnas con los mismos nombres y luego las concatena con Fitness (que todavía tiene todas sus columnas).No debería haber ningún trabajo para mantener las columnas que no coinciden.
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaTrabajó. Muchas gracias. Ahora solo tengo que descubrir cómo copiar las columnas que no coinciden, pero creo que puedo manejarlo.
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaLo intentaré e informaré (puede tomar un tiempo debido a circunstancias no relacionadas).
muchos tx
Re: Copiar subconjunto de columna o rango de celdas de tabla a tabla
@RonB escribió:
Si te entiendo, necesito crear la tabla 2.1 con las columnas ea, luego reordenarlas para que sean ae y concatenar la tabla 2.1 con la tabla 1.
Lo tienes, sin embargo, no es necesario reordenar las columnas. Tablas->Concatenar coincidencias en el nombre de la columna, no en la posición.
El subconjunto se basa en la selección de columnas, por lo que debe seleccionar las columnas que son comunes entre las dos tablas. Pero eso es fácil porque puede obtener todos los nombres de las columnas de la tabla 1 y seleccionar toda la lista en la tabla 2. Cualquiera que no exista será ignorado.
Aquí hay un ejemplo usando dos de las tablas de datos de muestra.
bc = Open( "$SAMPLE_DATA\Big Class.jmp" );
fit = Open( "$SAMPLE_DATA\Fitness.jmp" );
fit_cols = fit << get column names;
bc << select columns( fit_cols );
sub_bc = bc << Subset( All rows, Selected columns only( 1 ) );
fit << Concatenate( sub_bc );
//if you don't want a new table you can use "Append to first table"
fit << Concatenate( sub_bc, Append to first table );
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaDE ACUERDO. Buen animo.
Table1 tiene columnas abcde, table2 tiene columnas xyezau v. Quiero concatenar a la tabla 1 solo las columnas ea de la tabla 2. ¿Cómo harías para hacer eso?
Si te entiendo, necesito crear la tabla 2.1 con las columnas ea, luego reordenarlas para que sean ae y concatenar la tabla 2.1 con la tabla 1.
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaNo renuncie a las funciones integradas, como Tablas->Concatenar tan rápidamente.
Si solo desea las columnas que tienen el mismo nombre entre dos tablas, puede usar Tablas->Subconjunto para crear dos tablas con solo esas columnas de cada tabla y luego concatenar esas dos tablas.
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaGracias de nuevo. Desafortunadamente, concatenar no funcionará debido a la naturaleza extraña de mis conjuntos de datos.
Necesito concatenar solo ciertas columnas, ignorando la prueba.
Siempre puedo recorrer todas las filas en la tabla de origen e insertar filas en las tablas de destino y luego establecer el valor de la columna una por una. Pero me temo que acaparará la CPU: mi secuencia de comandos procesará más de 100 archivos con docenas de columnas y miles de filas. Además, no es una solución elegante, aunque probablemente inevitable.
Voy a simplificar mi pregunta.
¿Puedo hacer algo así?
Columna (dt, i) [desde, hasta] = lista o matriz de valores
Gracias por tu paciencia,
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaLa concatenación no ignora las columnas que no coinciden.Aquí hay una muestra usando Big Class y Big Class Families, tablas de datos de muestra.Tenga en cuenta que la tabla de datos de Big Class termina con todas las columnas que tiene Big Class Families que no están en la tabla de datos original de Big Class.
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/big class.jmp" );
dt2 = Open( "$SAMPLE_DATA/big class families.jmp" );
dt1 << concatenate( dt2, Append to First Table( 1 ) );
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaGracias.
La función de concatenación no funcionará porque necesito hacerlo solo para las columnas que son idénticas en ambas tablas, omitiendo todas las demás.
Intenté almacenar los datos de la columna de origen en una matriz/lista y luego establecer el valor en la columna de destino (la segunda tabla) usando la suscripción [I,j] pero supongo que me falta algo.
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaPuede hacer que JMP genere el código por usted.
ejecutar el
Tablas==>Concatenar
de forma interactiva, y luego en la nueva tabla de datos, vaya al Panel de tablas en el lado izquierdo de la tabla de datos y haga clic con el botón derecho en la entrada "Fuente" y seleccione "Editar".Allí verá el JSL necesario para concatenar los archivos.
El JSL es básicamente
dt1=data table(<YOUR first="" table="">);
dt2=data table(<YOUR second="" table="">);
dt1 = dt1 << concatenate( dt2, Append to First Table(1));</YOUR></YOUR>
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaGracias. Lo pensé. Sin embargo, necesito hacerlo con un script porque tengo muchos de esos archivos y el orden de las columnas cambia de uno a uno.
Me gustaría encontrar algún código que lo haga.
Gracias
Re: Copiar subconjunto de columna o rango de celdas de tabla a tablaJMP concatenará tablas de datos usando
Tablas==>Concatenar
Alineará las columnas por nombre de columna cuando se concatene.Los valores faltantes se agregarán automáticamente en las filas de las columnas que no aparecen en una u otra tabla de datos.
La plataforma de concatenación mantiene el nombre intacto para las columnas coincidentes y solo agrega nuevos nombres de columna para las columnas que no estaban en la tabla de datos base.
Para obtener documentación, consulte:
Ayuda==>Libros==>Uso de JMP