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 ) );
正規表現を使用して複雑な条件を作成することもできます。
// :nameが"j"または"J"で始まる行を選択する
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
/* \0はグループ参照で、これによりマッチするテキスト全体が戻される。正規表現はマッチに成功した場合にマッチしたテキストを戻し、マッチに失敗した場合には欠測値を戻すため、!Is Missingが必要。つまり、!Is Missingは、ストリングがマッチに成功したことを意味する*/
dt << Select Where( !Is Missing( Regex( :name, "^j", "\0", IGNORECASE ) ) );
// :nameが"N"または"E"で終わる行を選択する。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( !Is Missing( Regex( :name, "(N|E)$", "\0" ) ) );
現在除外されている行、表示されていない行、またはラベル付きの行を選択するには:
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( "身長(インチ)"n / "体重(ポンド)"n[1] ) );
無作為に選択した行を取得するには、次の構文を使用します。
dt << Select Randomly( number );
dt << Select Randomly( Sample Size( number ) );
dt << Select Randomly( probability );
dt << Select Randomly( Sampling Rate( probability ) );
条件付き確率を使って、指定された行数を選択します。
行メニューコマンド[一致するセルを選択]も(Select Matching Cells)JSLに組み込まれています。
// 現在のデータテーブルの中で一致するセルを選択する
dt << Select Matching Cells;
// 開いているすべてのデータテーブルの中で一致するセルを選択する
dt << Select All Matching Cells;
複雑な選択を行う場合や、選択を行の属性データとして永続的に格納する方法については、行の属性を参照してください。