データ テーブルの列の名前を変更するための連想配列JMP コミュニティの皆様、こんにちは。
多くの列を持つデータ テーブル (dt1) があり、それらの名前を変更したいと考えています。 それらは奇妙な名前でコード化されています。 しかし、:Name と :Code の 2 つの列しかない別のデータ テーブル (dt2) があります。 dt2 の各行には、コードに関連付けられた意味のある名前があります。
forループでこれを行う方法は知っていますが、何か新しいことを学ぼうとしており、連想配列を介してそれを行いたいと考えています。 このスレにあるものと似たようなものここ. 私はこのようなことができると思いました:
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 ) ) ) );
しかし、残念ながら、これは機能しません。 それは私がどのように振る舞っていない考え連想配列が動作しました。
繰り返しますが、何か新しいことを学び、新しい JSL コマンドを使いこなしたいと考えています。そのため、連想配列を使用したいと考えています。 それが不可能な場合は、強引な For-Loop の方法で行います。
これについての考えやフィードバックをありがとう!,
DS
データ表スクリプティングRe: データ テーブルの列の名前を変更するための連想配列やあ@David_Burnham 、
はい、私はあなたの例に従い、ハードコーディングを理解しました。 Name 列と Code 列の別のテーブルを操作する場合、連想配列を作成するのは簡単でした (注: 正しい順序にする必要があります)。そのため、列名を設定するときに、一致するキーに正しい値が適用されます。 私はそれを実行しましたが、完全に機能しました。 繰り返しますが、助けてくれてありがとう!
DS
Re: データ テーブルの列の名前を変更するための連想配列明確にするために、実際の例を示すために配列の内容をハードコーディングしました。別のテーブルからキーと値を入力することは理にかなっています。また、Evals、Expr などは必要ないことにも注意してください。頑張ってください。
Re: データ テーブルの列の名前を変更するための連想配列やあ@David_Burnham 、
ご意見ありがとうございます。 連想配列をさらに読み取る必要があることは明らかです。 For ループはあまり気にしませんが、名前の変更をより洗練された方法でコーディングしたいと考えていました。 他のスレッドへのリンクは、別の列の数値エントリに基づいて列の値を並べ替えるための非常に洗練されたソリューションでした。 そのスクリプトで連想配列が機能する方法は、テーブルの列に対して機能すると思っていた方法でしたが、明らかに機能しません。 過去にリスト {...} を使用して For ループで列の名前を変更したことがありますが、ループを使用しない別の方法を試してみました。 ただし、私はあなたが提示した連想配列の方法が好きで、リストを作成するのではなく、その方法で行います。
最初のデータテーブルの列名のリストと2番目のデータテーブルの連想配列を使用すると、列の「再コード化」機能のように、連想配列のために名前を簡単に再割り当てできると考えていたと思います名前。
とにかく、連想配列を使用して列の名前を変更するという私の質問に対する返信と解決策に感謝します。 データに戻る時が来ました!
ありがとう!、
DS
Re: データ テーブルの列の名前を変更するための連想配列関連配列と for ループの使用は、相互に排他的ではありません。多くの人が for ループを避けたいと思っていることは知っていますが、結局のところ、テーブルの列を反復処理したい場合、for ループは反復処理を行うように設計されています。
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>