正規表現の選択に基づいて列をスタックする<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私は、共通のプレフィックスを持ち、異なる番号またはサフィックスで終わる何百もの列を常に積み重ねています。
私がやりたいのは、次のようなスクリプトを書くことです。
- 正規表現パターンに基づいて列を検索します (例: "BLUE_CARS_*_\d{1,2}"、"HOMES_(SINGLE|DOUBLE)_WIDE" など)。
- それらの列を選択してください
- 列を積み重ねる (そして新しいデータシートに配置する)
私は一生、列選択で正規表現を使用する方法を見つけることができません(またはGoogle検索で適切に検索することもできません)。
データ型で列を選択することを検討しましたが、そのデータ型を共有する列が他にも存在します。
もっと柔軟なものが欲しいと思っています。
ご提案やコード スニペットをいただければ幸いです。よろしくお願いいたします。
Re: 正規表現の選択に基づいて列をスタックするshow() と何が起こっているかの詳細を見ると、実際の列ではなく列名を使用するように実際に指示していることがわかりました。nc = dt << get column names;< なので、これは理にかなっていると思います。 /code> が最初に使用されました。 したがって、代わりに
cname = nc<I> << 名前を取得;</I>
私たちには必要だった
cname = column(nc<I> ) << 名前を取得;</I>
デフォルトでは、 get column names() は列のリストではなく文字列を返すと思います。 ああ、今のところ期待通りに動作しています。
お手伝いありがとう!
Re: 正規表現の選択に基づいて列をスタックするshow( i, nc );
2 つの変数の現在の値が表示されます。これを「i++」の後に挿入し、ループ内でインクリメントします。nc は列名のリスト (中括弧内) として表示される*はずです。この場合、<
show コマンドを使用して実行した後にログを確認し、何が問題であるかを確認してください。
JMP のスクリプト可能オブジェクトは、メッセージを理解するオブジェクトです。変数には、スクリプト可能なオブジェクトではない行列、リスト、または数値を保持することも、スクリプト可能なオブジェクトであるディスプレイボックス、データ テーブル、または列を保持することもできます。他にもたくさんの型があり、スクリプト可能なものもあれば、そうでないものもあります。
私の推測では、データ テーブルがアドインによって明示的に選択されておらず、そこからエラーが連鎖的に発生していると考えられます。この前に別の show() が必要になる場合があります。
クレイジ
Re: 正規表現の選択に基づいて列をスタックするこのコードを JMP アドイン (ボタン付き) に変換する際に問題が発生しました。 このコードは、スクリプト エディターから実行すると問題なく機能しますが、アドインとして実行しようとすると、次のような問題が発生します。
Send は 'Send' のアクセスまたは評価でスクリプト可能オブジェクトを期待します、nc<I> << /*###*/名前を取得/*###*/</I>
For( i = 1, i <= N Items( nc ), i++, cname = nc<I> << /*###*/get name/*###*/; model = nc<I> << get modeling type;</I></I>
読む最初の行を変更すると、 cname = dt << get name(nc<I> );</I>次の行について文句を言います。
次に、この行を次のように変更します。 model = dt << モデリング タイプを取得(nc<I> );</I>そして、sort() 関数に進み、エラーを変更します。
<CODE> Send は、 'Send' のアクセスまたは評価でスクリプト可能オブジェクトを期待し、転置 <<SPAN style="font-family: arial, helvetica, sans-serif;">そしてコードは次のようになります</SPAN>
transposed = transposed << /*###*/ sort(replace table, by("Row 1"), order(Descending))/*###*/;<BR /><SPAN style="font-family: arial, helvetica, sans-serif;">これを解決し、移植可能にする (エディターとアドインの両方で問題なく動作する) 方法について何かアイデアはありますか? 不明確に思われるかもしれませんが、ご容赦ください。</SPAN>
(うわー、なぜメッセージのプレビューボタンがないのですか...)。
Re: 正規表現の選択に基づいて列をスタックするはい、デバッグに役立ついくつかの show 関数を JSL に残しました。古い質問に対する古い回答でログが乱雑にならないように、完了したらそれらを取り出してください。
クレイジ
Re: 正規表現の選択に基づいて列をスタックするようこそ、ありがとう。可能な限り明示的なデータ テーブルを使用します。
dtstacked = dt << スタック(
列(icols)、
ソースラベル列( "Label" )、
積み上げデータ列( "データ" )
);
dtstacked は、dt<Re: 正規表現の選択に基づいて列をスタックする
素晴らしい! まさにそれが私が必要としていたものです。
私はまだ jsl 構文とすべてを「表示」する必要性に慣れてきています。
Regex() 関数については、通常の列関数以外での使用に関するドキュメントが見つからなかったので、同じように動作するのは便利です。 これは非常に多くの点で役立つことがわかります。
関連して、スクリプトの残りの部分で使用する新しいテーブル/ウィンドウが選択されていることを確認するにはどうすればよいですか?
また、コードがめちゃくちゃになるため、翻訳を必ずオフにする必要がありました。
ありがとう!
Re: 正規表現の選択に基づいて列をスタックするJSL を正しく表示するには、画面上部の翻訳チェックボックスをオフにする必要がある場合があります。
Re: 正規表現の選択に基づいて列をスタックするこのようなもの。
dt = Open( "$sample_data/big class.jmp" );
allCols = dt << getcolumnnames;
Show( allCols ); // これらは文字列ではなく名前です
acols = {}; // 名前に「a」が含まれる列
icols = {}; // 名前に「i」が含まれる列
n = N 項目( allCols );
For( k = 1、k <= n、k++、
cname = allCols << 名前を取得; // これらは文字列なので正規表現に適しています
Show( cname );
If( !Is Missing( Regex( cname, "a" ) )、
Insert Into( acols, allCols) // 名前を保持します
);
If( !Is Missing( Regex( cname, "i" ) )、
Insert Into( icols, allCols) // 名前を保持します
);
);
Show( acols, icols ); // {:名前, :年齢} と {:身長, :体重}
dt << スタック(
列(icols)、
ソースラベル列( "Label" )、
積み上げデータ列( "データ" )
);
