行でフィルタリングし、列をスタックしますか?私はいくつかの基準に基づいてサブセットテーブルを作成する方法を知っています:
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:行でフィルタリングし、列をスタックしますか?スタックプラットフォームを使用するときに選択した行を削除する簡単な方法の例を次に示します。
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;
Re:行でフィルタリングし、列をスタックしますか?(誤って解決策として受け入れる)
ありがとうございますが、選択した行を削除したくありません。 私はそれを処理できますが、Stackを使用するときに選択を追加するにはどうすればよいですか?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:行でフィルタリングし、列をスタックしますか?ああ.....あなたは選択した行を削除することについて正しいです。ただし、選択されていないものを削除するには、
dtStack << Invert Row Selection;
次に、行を削除します。
複数の独立したスタックデータテーブルを追加するには、次のようにします。
- 繰り返しスタックインスタンスを開始する前に、空のベースデータテーブルを作成します。これにより、すべてのスタックテーブルが連結されます。
dtBase = New Table("Base");
- 次に、作成するスタックテーブルごとに、
- スタックデータテーブルから不要な行を削除します
- スタックテーブルをベーステーブルに連結します
dtBase << Concatenate( dtStacked );
- スタックテーブルを削除します
Close( dtStacked, nosave );
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:行でフィルタリングし、列をスタックしますか?Into()に挿入あなたが思っているように見えることをしません。
コードでは、データテーブル参照dtをdtstackedリストに繰り返し挿入します。 選択した行や列とは何の関係もありません。
Subset()を使用して、選択した行と列の新しいデータテーブルを作成し、その参照をdtstackedに挿入してから、それらを連結する必要があります。
しかし、それは必要ではないようです。 ループの最後で毎回選択範囲を拡張しているだけなので、選択した行と列のサブセットを作成して、連結されたデータテーブルと同じ結果を得ることができます。