行でフィルタリングし、列をスタックしますか?いくつかの基準に基づいてサブセットテーブルを作成する方法は知っています。
dt << Row Selection( Select where( (:Stat == "mean"), Current Selection( Extend )) );
dt << Select Columns( [10, 20] );
dt2 << Subset( Output Table( "test"), Selected Rows( 1 ), Selected columns( 1 ) );
しかし、今度は複数の条件に対して上記を繰り返し、選択を積み重ねる必要があります。つまり、新しいテーブルには列 10 が固定列として含まれ、その後、上記の条件に一致する行のみを含む列 20 を追加し続けます。行数は常に同じになります。
「スタック」コマンドは選択範囲では機能しないので、他のどのコマンドでそれができるかわかりませんか?
データのブレンディングとクリーンアップRe: 行でフィルターし、列をスタックしますか?それは実際に私が望んでいたものです、もう一度ありがとう!
Re: 行でフィルターし、列をスタックしますか?あなたが望む最終的なテーブル出力は何であると私が推測しているかを再考して、見てみることをお勧めします。
テーブル=>分割
以下の例では、:Sex 列で分割されています。これは :Freq 列になり、分割列は身長と体重で、15 列と 19 列になります。
出力では、Split By 列値ごとに列のペアが作成されます。
Names Default To Here( 1 );
dt = open("$SAMPLE_DATA\big class.jmp");
// Split data table
// → Data Table( "Untitled 66" )
Data Table( "big class" ) << Split(
Split By( :Sex ),
Split( :height, :weight ),
Remaining Columns( Drop All ),
Sort by Column Property
);

Re: 行でフィルターし、列をスタックしますか?ありがとう、それは正しかった! 残っているのは、それを for ループに入れる方法だけです。 私のトライアルは次のとおりです。
For(i=1, i<=NItems(freq_list), i++,
dt << clear select;
dt << Row Selection( Select where( (:Freq == (freq_list[i])), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt << Subset( ( Selected Columns ), Output Table Name( freq_list[i] ) );
);
ただし、各ループの開始時に選択をクリアしたとしても、これにより 2 つの同一のテーブルが生成されます。
Re: 行でフィルターし、列をスタックしますか?問題は、両方のテーブルの列の名前が同じであることだと思います。したがって、JMP は値を上書きします。これをどのように処理するかについての簡単な例を次に示します。ここで、このタイプの更新を行うと、2 つのデータ テーブルが行 1 と行 1 で並べられます。
その結果、列間の関係が存在しないため、列間で比較できないという問題が発生する可能性があります。
dt << Row Selection( Select where( (:Freq == "F0"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt2 = dt << Subset( ( Selected Columns ), Output Table Name( "F0" ) );
dt << clear select;
dt << Row Selection( Select where( (:Freq == "F1"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt3 = dt << Subset( ( Selected Columns ), Output Table Name( "F1" ) );
// Rename the columns
column(dt3,1) <<SET name=""></SET>
Re: 行でフィルターし、列をスタックしますか?たくさんの投稿をお詫び申し上げます。 私はまだ立ち往生しています。 現時点で私が持っているのは、興味のある 1 つの列を持つ 2 つのテーブルを生成するこのスクリプトだけです。 テーブル 1 からテーブル 2 に 1 つの列を手動でコピーして貼り付けることはできますが、自動的に行うことはできません。
dt << Row Selection( Select where( (:Freq == "F0"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt << Subset( ( Selected Columns ), Output Table Name( "F0" ) );
dt << clear select;
dt << Row Selection( Select where( (:Freq == "F1"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt << Subset( ( Selected Columns ), Output Table Name( "F1" ) );
Re: 行でフィルターし、列をスタックしますか?いいえ、上記のコードはまだ連結されています。 「update」コマンドを試してみます。
Re: 行でフィルターし、列をスタックしますか?以下は手動で動作すると思われるコードです。 次に、ループでそれを実行してみます。
dt << Row Selection( Select where( (:Stat == "selection1"), Current Selection( Extend )) );
dt << Select Columns( [15, 19] );
dt << Row Selection( Select where( (:Stat == "selection2"), Current Selection( Extend )) );
dt << Select Columns( [15, 19] );
dt << Subset( ( Selected Columns ), Output Table Name( "Subset_1_2" ) );
Re: 行でフィルターし、列をスタックしますか?連結せずに新しい列を追加するには、単純に更新プラットフォームを使用します。
Re: 行でフィルターし、列をスタックしますか?ありがとう、これはほぼ私が望むものですが、連結(行方向)ではなく積み重ね(列方向)する必要がある点が異なります。 つまり、選択列の長さが L の場合、新しいテーブルの行数は同じですが、列は 2 つになります (1 列の長さが 2 倍になるわけではありません)。Re: 行でフィルターし、列をスタックしますか?() に挿入あなたが思っているようなことはしません。
コードでは、データ テーブル参照 dt を dtstacked リストに繰り返し挿入します。 選択した行や列とは何の関係もありません。
Subset() を使用して、選択した行と列の新しいデータ テーブルを作成し、その参照を dtstacked に挿入して、それらを連結する必要があります。
ただし、その必要はないようです。 ループの最後で毎回選択範囲を拡張しているだけなので、選択した行と列のサブセットを実行して、連結されたデータ テーブルと同じ結果を得ることができます。
Re: 行でフィルターし、列をスタックしますか?ありがとう、でもうまくいきませんでした:
dt = current data table();
my_list = {"F0","F1"};
dtBase = New Table("Base");
dtStacked = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( dtStacked, dt );
dtBase << Concatenate( dtStacked );
Close( dtStacked, nosave );
);dtBase は空です。
Re: 行でフィルターし、列をスタックしますか?ああ....選択した行を削除するのは正しいです。ただし、選択されていないものを削除するには、単に使用します
dtStack << Invert Row Selection;
そして行を削除します。
複数の独立したスタック データ テーブルを追加するには、次の手順を実行します。
- 繰り返しのスタック インスタンスを開始する前に、空のベース データ テーブルを作成します。このテーブルには、すべてのスタック テーブルが連結されます。
dtBase = New Table("Base");
- 次に、作成した積み上げテーブルごとに、
- 積み上げデータテーブルから不要な行を削除します。
- 積み上げテーブルをベーステーブルに連結する
dtBase << Concatenate( dtStacked );
- 積み上げテーブルを削除する
Close( dtStacked, nosave );
Re: 行でフィルターし、列をスタックしますか?これが私がそれを行うことができると考えた方法です(しかし、うまくいきません):
my_list = {"F0","F1"};
stackcols = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( stackcols, dt )
);
dt2 << Subset( Output Table( "aa"), Selected Rows( 1 ), Selected columns( 1 ) );基本的に、列「Freq」に従って、最初に値「F0」、次に「F1」によってアクティブなテーブルをフィルタリングします。 これは列 19 にあります。 その選択を「stackcols」という選択リストに追加します。 したがって、ループの後、これは 2 列幅のリストになると予想されます。 次に、それからテーブルを作成したいと思います (「aa」と呼ばれます)。 しかし、うまくいきません。
Re: 行でフィルターし、列をスタックしますか?(間違って解決策として受け入れるを押してください)
ありがとうございます。選択した行は削除したくありません。 それについては対処できますが、スタックを使用するときに選択範囲を追加するにはどうすればよいでしょうか?Re: 行でフィルターし、列をスタックしますか?これは、スタック プラットフォームを使用するときに選択した行を削除する簡単な方法の例です。
names default to here(1);
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Row Selection( Select where( (:Sex=="F"), Current Selection( "Extend" )) );
// Stack data table
dtStack = dt << Stack(
columns( :height, :weight ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << delete rows;