Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreJ'ai deux tableaux de données. Certaines colonnes de table2 sont identiques aux colonnes table1.
Je ne devais pas copier les données des colonnes identiques de table2 à table1.
Cela signifie, bien sûr, que (1) la table1 sera développée avec le nombre ou les lignes de la table2 et (2) il y aura des données manquantes dans la table1. C'est OK.
Mon problème est de savoir comment copier les données de table2 à table1.
Par exemple - les deux tables ont la colonne "NAME". Table1 a 1000 lignes, table2 a 2000 lignes.
Les résultats seront : table1 avec 3000 lignes, et "NAME" sur table1 sera une "concaténation" des deux colonnes NAME. Les autres colonnes de table1 auront 2000 données manquantes/vides.
BTW, en réalité, les tables sont beaucoup plus grandes et il y a 10 à 20 colonnes identiques (sur ~ 100). Je m'en occuperai une fois que j'aurai compris la fonction de base. Je le mentionne au cas où il y aurait un problème avec une telle taille.
Merci beaucoup
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreQuelque chose n'a pas fonctionné pour moi avec l'exemple.
Mais peu importe, j'ai eu l'idée et cela semblait fonctionner avec l'exécution d'un test sur quelques fichiers d'entrée.
On dirait que j'ai compliqué les choses inutilement alors qu'une manière simple était sous mon nez.
Merci pour votre patience
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autre
@RonB écrit:
Oui, je comprends cela. Mais la structure de données dont je traite nécessite de copier également des colonnes dans Big Class qui n'ont pas le même nom dans Fitness. C'est-à-dire que ces colonnes seront "concaténées verticalement" dans la table de sortie en tant que nouvelles colonnes. Ces colonnes commenceront par les données manquantes (autant de lignes qu'il y en a dans Fitness) suivies des données de Big Class.
En quoi est-ce différent de la simple concaténation des deux tables pour commencer ? En faisant cela, vous vous retrouverez avec une table avec toutes les lignes et toutes les colonnes des deux tables. Les colonnes qui n'ont pas de noms correspondants dans les deux tables seront vides pour les lignes qui n'avaient pas ces colonnes à l'origine.
Arrêtons de parler abstraitement et soyons plus concrets. Voici deux tableaux :
Tableau 1
Tableau 2
En utilisant Tables->Concatenate sur ces deux tables, vous vous retrouverez avec cette table.
Tableau 3
| UN |
B |
C |
D |
| 1 |
1 |
1
|
• |
| 2 |
2 |
2 |
• |
| 3 |
3 |
3 |
• |
| 4 |
4 |
• |
4 |
| 5 |
5 |
• |
5 |
| 6 |
6 |
• |
6 |
La façon dont j'interprète votre description ci-dessus me fait penser que c'est le tableau que vous voulez. Si ce n'est pas le cas, je suis désolé d'avoir mal compris votre demande.
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreOui, je comprends cela. Mais la structure de données dont je traite nécessite de copier également des colonnes dans Big Class qui n'ont pas le même nom dans Fitness. C'est-à-dire que ces colonnes seront "concaténées verticalement" dans la table de sortie en tant que nouvelles colonnes. Ces colonnes commenceront par les données manquantes (autant de lignes qu'il y en a dans Fitness) suivies des données de Big Class.
Je pense que je peux le faire en ajoutant d'abord à Fitness de nouvelles colonnes avec tous les noms de Big Class qui sont différents. Ensuite, utilisez la même méthode que vous m'avez montrée, en créant une sous-catégorie de Big Class avec uniquement ces colonnes et en effectuant la concaténation.
C'est beaucoup de travail mais je ne vois pas d'autre moyen de gérer le grand nombre de tables et de colonnes que j'ai.
Merci encore
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autre
@RonB écrit:
Maintenant, je dois juste trouver comment copier les colonnes non correspondantes, mais je pense que je peux gérer.
Colonnes non correspondantes de quelle table ? L'exemple ci-dessus conserve toutes les colonnes de la table Fitness et concatène uniquement les colonnes portant le même nom de Big Class. Pour ce faire, il ne crée que des sous-ensembles de Big Class pour obtenir les colonnes portant les mêmes noms, puis les concatène à Fitness (qui a toujours toutes ses colonnes).Il ne devrait pas y avoir de travail pour conserver les colonnes qui ne correspondent pas.
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreTravaillé. Merci beaucoup. Maintenant, je dois juste trouver comment copier les colonnes non correspondantes, mais je pense que je peux gérer.
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreJe vais essayer et faire rapport (cela peut prendre un certain temps en raison de circonstances indépendantes).
Beaucoup de tx
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autre
@RonB écrit:
Si je vous comprends, j'ai besoin de créer table2.1 avec des colonnes ea, que de les réorganiser pour être ae, et de concaténer table2.1 à table1 ?
Vous l'avez compris, pas besoin de réorganiser les colonnes cependant. Tables->Concaténer les correspondances sur le nom de la colonne, pas sur la position.
Le sous-ensemble repose sur la sélection de colonnes, vous devez donc sélectionner les colonnes communes aux deux tables. Mais c'est facile car vous pouvez simplement obtenir tous les noms de colonne de table1 et sélectionner toute cette liste par rapport à table2. Tout ce qui n'existe pas sera ignoré.
Voici un exemple utilisant deux des exemples de tables de données.
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 : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreD'ACCORD. Bons encouragements.
Table1 a des colonnes abcde, table2 a des colonnes xyezau v. Je veux concaténer à table1 uniquement les colonnes ea de table2. Comment feriez-vous cela ?
Si je vous comprends, j'ai besoin de créer table2.1 avec des colonnes ea, que de les réorganiser pour être ae, et de concaténer table2.1 à table1 ?
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreN'abandonnez pas les fonctions intégrées, comme Tables->Concaténation si rapidement.
Si vous ne voulez que les colonnes qui ont le même nom entre deux tables, vous pouvez utiliser Tables->Sous-ensemble pour créer deux tables avec uniquement ces colonnes de chaque table, puis concaténer ces deux tables.
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreMerci encore. Malheureusement, la concaténation ne fonctionnera pas en raison de la nature bizzar de mes ensembles de données.
Je n'ai besoin de concaténer que certaines colonnes, en ignorant le test.
Je peux toujours parcourir toutes les lignes de la table source et insérer des lignes dans les tables cibles, puis définir la valeur de la colonne une par une. Mais j'ai peur que cela ne surcharge le processeur - mon script traitera plus de 100 fichiers avec des dizaines de colonnes et des milliers de lignes. De plus, ce n'est pas une solution élégante, bien que probablement inévitable.
Je vais simplifier ma question.
Puis-je faire quelque chose comme ça?
Column(dt, i)[from,to] = liste ou matrice de valeurs
Merci pour votre patience,
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreLa concaténation n'ignore pas les colonnes non correspondantes.Voici un exemple utilisant les grandes classes et les grandes familles de classes, exemples de tableaux de données.Veuillez noter que la table de données Big Class se termine par toutes les colonnes des familles Big Class qui ne figurent pas dans la table de données Big Class d'origine.
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 : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreMerci.
La fonction de concaténation ne suffira pas car je dois le faire uniquement pour les colonnes identiques dans les deux tables, en sautant toutes les autres.
J'ai essayé de stocker les données de la colonne source dans une matrice/liste et de définir la valeur sur la colonne cible (la deuxième table) en utilisant l'abonnement [I,j] mais je suppose qu'il me manque quelque chose.
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreVous pouvez demander à JMP de générer le code pour vous.
Exécutez le
Tableaux==>Concaténer
interactivement, puis dans la nouvelle table de données, allez dans le panneau Tables sur le côté gauche de la table de données et faites un clic droit sur l'entrée "Source", puis sélectionnez "Modifier".Vous y verrez le JSL requis pour concaténer les fichiers ensemble.
Le JSL est essentiellement
dt1=data table(<YOUR first="" table="">);
dt2=data table(<YOUR second="" table="">);
dt1 = dt1 << concatenate( dt2, Append to First Table(1));</YOUR></YOUR>
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreMerci. J'y ai pensé. Cependant, je dois le faire avec un script car j'ai beaucoup de fichiers de ce type et l'ordre des colonnes change de un à un.
J'aimerais trouver un code qui le fera.
Merci
Re : Copier un sous-ensemble de colonnes ou une plage de cellules d'un tableau à l'autreJMP concaténera les tables de données à l'aide de
Tableaux==>Concaténer
Il alignera les colonnes par nom de colonne lors de la concaténation.Les valeurs manquantes seront automatiquement ajoutées dans les lignes des colonnes qui n'apparaissent pas dans l'une ou l'autre table de données.
La plate-forme de concaténation conserve le nom intact pour les colonnes correspondantes et ajoute simplement de nouveaux noms de colonne pour les colonnes qui ne figuraient pas dans la table de données de base.
Pour la documentation, voir :
Aide==>Livres==>Utiliser JMP