公開日: 04/01/2021

行の選択

Select All Rowsは、データテーブル内のすべての行を選択(強調表示)します。

dt << Select All Rows;

すべての行が選択されている場合、Invert Row Selectionを使用してそれらの選択を解除できます。このコマンドは、各行の選択の状態を逆にするので、選択されている行は選択が解除され、選択されていない行は選択されます。

dt << Invert Row Selection;

注: 現在の選択内容によって結果が異なるInvert Row Selectionを除き、選択メッセージを新しく使用した場合、新たに選択が行われます。すでに選択している行があり、選択された行に新しいメッセージを送ると、それらの行は、まず選択が解除されます。

特定の行を選ぶには、Go To Rowを使います。

dt << Go To Row( 9 );

データテーブルの特定の行を行番号で選択するには、Select Rowsコマンドを使います。コマンドの引数は行番号のリストです。たとえば、データテーブルの行1、3、5、および7を選択するには、次のように指定します。

dt << Select Rows( {1, 3, 5, 7} );

行の範囲を選択するには、次のメッセージのいずれかを指定します。

dt << Select Rows( Index( 7, 10 ) );
dt << Select Where( Any( Row() == Index( 7, 10 ) ) );

どちらの例も、現在のデータテーブルの中で7行目から10行目までを選択します。

条件による選択

データ値に基づいて行を選ぶには、Select Whereを使い、引数として条件式を指定します。

ヒント: Select Whereメッセージの中で使用できる関数と演算子については、演算子を参照してください。

たとえば、「Big Class.jmp」データテーブルのうち、生徒の年齢が14歳以上である行を選択するには:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :年齢 > 13 );

生徒の年齢が14歳未満である行を選択するには:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col = Column( dt, 2 );
dt << Select Where( col[] < 14 );

次の例は、生徒の年齢が15歳未満で性別がF(女性)である行を選択します。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :年齢 < 15 & :性別 == "F" );

前に選択した行を解除しないまま、もう1つの行を選択するには、<< Select Where<< Select WhereおよびCurrent Selection("extend")引数と組み合わせます。これは、ORステートメントの代わりになります。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :年齢 == 14 );
dt << Select Where( :性別 == "F", Current Selection( "extend" ) );

特定の文字列を含む行を選択するには、次の例に従います。

dt = Open( "$SAMPLE_DATA/Hollywood Movies.jmp" );
my_genres = {"Romance", "Comedy"};
dt << Select Where( Contains( my_genres, :Genre ) );

正規表現を使用して複雑な条件を作成することもできます。

obj << Select Where( 2 < Ppk ); // Ppkが2より大きい
obj << Select Where( Column == "IVP9" ); // 列名が「IVP9」である

除外された行、表示されていない行、ラベルの付いた行の選択

現在除外されている行、表示されていない行、またはラベル付きの行を選択するには:

dt << Select Excluded;
dt << Select Hidden;
dt << Select Labeled;

除外されていない行、表示されている行、またはラベルがない行を選ぶには、選択メッセージと選択逆転メッセージの両方を同じステートメントに入れるか、またはこの2つのメッセージを続けて送ります。

dt << Select Hidden << Invert Row Selection;
dt << Select Hidden;
dt << Invert Row Selection;

重複した行の選択

データテーブルにある重複した行を選択するには、 Select Duplicate Rowsメッセージを用います。

dt = Open( "$SAMPLE_DATA/San Francisco Crime.jmp" );
dt << Select Duplicate Rows(); // 301行目と8864行目を選択します

重複している行のうち、2つ目およびそれ以降の行が選択されます。値が重複しているかどうかは、大文字と小文字を区別して判断されるようになっています。

注: デフォルトでは、列の指定がない場合、すべての列でマッチングを行います。

前述の例の重複している行は、データ入力の誤りであったとしましょう。重複した列を分析から削除するには、下記のように行を除外します。

dt = Open( "$SAMPLE_DATA/San Francisco Crime.jmp" );
dt <<Select Duplicate Rows();
dt << Exclude();

選択した列の値が重複した行を選択するには、列の名前を指定します。以下の例は、事件番号 および 時刻という列の値が重複した行を選択します。

dt = Open( "$SAMPLE_DATA/San Francisco Crime.jmp" );
dt << Select Duplicate Rows( Match( Column( "事件番号" ), :時刻 ) );

ある条件を満たすデータ値の場合のみ重複した行を選択するには、まず重複した行を選択し、選択されている行のみを対象として特定の条件のデータ値を選択します。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Duplicate Rows( Match( :年齢 ) );
dt << Select Where( :年齢 > 15, Current Selection( "restrict" ) );

特定の行のセルを参照

特定のセルを参照するには、そのセルの行番号を添え字として指定します。次の例では、「体重(ポンド)」列に添え字[1]が使われ、計算式によって「体重(ポンド)」列の最初の値に対する各「身長(インチ)」の比率が算出されます。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "比率", Formula( Name("身長(インチ)") / Name("体重(ポンド)")[1] ) );

ランダムに行を選択

無作為に選択した行を取得するには、次の構文を使用します。

dt << Select Randomly( number );
dt << Select Randomly( probability );

条件付き確率を使って、指定された行数を選択します。

一致するセルを選択

行メニューコマンド[一致するセルを選択]も(Select Matching Cells)JSLに組み込まれています。

// 現在のデータテーブルの中で一致するセルを選択する
dt << Select Matching Cells;
// 開いているすべてのデータテーブルの中で一致するセルを選択する
dt << Select All Matching Cells;

複雑な選択を行う場合や、選択を行の属性データとして永続的に格納する方法については、行の属性を参照してください。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).