Behalten Sie die Übereinstimmung von Spalten mit einer Liste bei, entfernen Sie den RestHi -
Ich möchte Spalten (basierend auf Spaltennamen) aus einer Datentabelle entfernen, die nicht einer Liste entsprechen. Ich habe bisher folgenden JSL-Code, aber er funktioniert nicht.
Eingabe geschätzt.
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 );
SkriptingFensterRe: Spalten mit einer Liste übereinstimmen lassen, Rest entfernenIch würde alle Spalten in der Datentabelle durchlaufen und bei Bedarf entfernen (wenn Sie bei Ihrer Idee bleiben möchten, kann ich auch beim Debuggen helfen):
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);Außerdem würde ich vorschlagen, J nicht als Variablennamen zu verwenden, da JMP eine Matrixfunktion J() hat.
Bearbeiten:
Außerdem ist es nicht erforderlich, Current Data Table() zu verwenden (und das sollten Sie auch nicht), da Sie nach dem Öffnen der Tabelle bereits über die Referenz verfügen. Hier ist auch meine bevorzugte Methode zum Entfernen von Spalten (mit assoziativem Array, um nur die zusätzlichen Spalten zu erhalten und diese zu entfernen):
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);Re: Spalten mit einer Liste übereinstimmen lassen, Rest entfernenWenn ich zwei Listen vergleiche, finde ich es einfacher, eine dritte Liste zu erstellen, die die Ergebnisse beim Durcharbeiten der Schleifen enthält, und dann die dritte Liste zu verwenden, um Maßnahmen zu ergreifen, wenn alle Schleifen abgeschlossen sind.Der folgende Code kann das erreichen, was Sie versuchen.
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: Spalten mit einer Liste übereinstimmen lassen, Rest entfernenDanke für die Eingabe und den Tipp zur Matrixfunktion J, jthi. Lass es mich noch einmal versuchen.