最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

groupfilter

グループによるフィルター処理

説明

G = groupfilter(T,groupvars,method) は、method の計算に従って table または timetable のデータをフィルター処理し、groupvars で指定されたグループ化変数の一意の組み合わせによりグループ化します。引数 method は、それぞれの非グループ化変数を処理する関数ハンドルです。出力 G は、method の条件を満たす T の行のみを含む table または timetable です。たとえば、G = groupfilter(T,'Trial',@(x) numel(x) > 5) は、T のデータを Trial 別にグループ化し、試行数が 5 を超えるグループに属する行を保持します。

G = groupfilter(T,groupvars,groupbins,method)groupbins に従ってデータをビン化してから、グループを出力 table の横方向に連結します。たとえば、G = groupfilter(T,'SaleDate','year',@(x) numel(x) > 5) は、SaleDate のデータを年別にビン化し、要素数が 5 を超えるビンの行を保持します。

G = groupfilter(___,datavars) は、前述の構文のいずれかについて、フィルターを適用する table 変数を指定します。たとえば、G = groupfilter(T,'Trial',@(x) x == max(x),'Height') は、各試行の最大高さに対応する T の行を保持します。

G = groupfilter(T,groupvars,groupbins,method,___,'IncludedEdge',LR) は、groupbins が指定されたときに含まれるビンのエッジを 'left' または 'right' として指定し、ビン区間のいずれの端が含まれるかを示します。

B = groupfilter(A,groupvars,method) は、A がベクトルまたは行列の場合に、groupvars のグループ化ベクトルの一意の組み合わせに従ってデータをフィルター処理します。groupvars は列ベクトル、行列、または列ベクトルの cell 配列にすることができます。出力 B は、method で定義された条件を満たす A の行を含む行列です。

B = groupfilter(A,groupvars,groupbins,method) は、groupbins に従ってデータをビン化します。

B = groupfilter(A,groupvars,groupbins,method,'IncludedEdge',LR) は、groupbins が指定された場合に各ビンに左右のエッジのいずれを含めるかを指定します。

[B,BG] = groupfilter(A,___) は、A のフィルター処理されていない行に対応するグループ化ベクトルの行も返します。

すべて折りたたむ

2 変数を含む table を作成します。

groupID = [1 1 1 2 2 3]';
sample = [3 1 2 9 8 5]';
T = table(groupID,sample)
T=6×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   
       2         9   
       2         8   
       3         5   

ID 番号でグループ化し、サンプル数が 2 を超えるグループに対応する行のみを返します。

Gnumel = groupfilter(T,'groupID',@(x) numel(x) > 2)
Gnumel=3×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   

グループのサンプル数が 0 ~ 6 である行のみを返します。

Gvals = groupfilter(T,'groupID',@(x) min(x) > 0 && max(x) < 6)
Gvals=4×2 table
    groupID    sample
    _______    ______

       1         3   
       1         1   
       1         2   
       3         5   

日番号と温度を表す 2 変数を含む table を作成します。

daynum = [1 1 1 1 2 2 2 2]';
temp = [67 65 71 55 61 79 58 78]';
T = table(daynum,temp)
T=8×2 table
    daynum    temp
    ______    ____

      1        67 
      1        65 
      1        71 
      1        55 
      2        61 
      2        79 
      2        58 
      2        78 

日番号でグループ化し、それぞれの日の最も高い温度 2 値を返します。

G = groupfilter(T,'daynum',@(x) ismember(x,maxk(x,2)))
G=4×2 table
    daynum    temp
    ______    ____

      1        67 
      1        71 
      2        79 
      2        78 

日付と、それに対応する利益の table を作成します。

timeStamps = datetime([2017 3 4; 2017 3 2; 2017 3 15; 2017 4 10;...
                       2017 4 14; 2017 4 30; 2017 5 25;...
                       2017 5 29; 2017 5 21]);
profit = [2032 3071 1185 2587 1998 2899 3112 909 2619]';
T = table(timeStamps,profit)
T=9×2 table
    timeStamps     profit
    ___________    ______

    04-Mar-2017     2032 
    02-Mar-2017     3071 
    15-Mar-2017     1185 
    10-Apr-2017     2587 
    14-Apr-2017     1998 
    30-Apr-2017     2899 
    25-May-2017     3112 
    29-May-2017      909 
    21-May-2017     2619 

日付を月でグループ化し、その月の最大利益に対応する行のみを返します。

Gmax = groupfilter(T,'timeStamps','month',@(x) x == max(x))
Gmax=3×3 table
    timeStamps     profit    month_timeStamps
    ___________    ______    ________________

    02-Mar-2017     3071         Mar-2017    
    30-Apr-2017     2899         Apr-2017    
    25-May-2017     3112         May-2017    

平均利益が $2300 を超える月を含む行を返します。

Gavg = groupfilter(T,'timeStamps','month',@(x) mean(x) > 2300)
Gavg=3×3 table
    timeStamps     profit    month_timeStamps
    ___________    ______    ________________

    10-Apr-2017     2587         Apr-2017    
    14-Apr-2017     1998         Apr-2017    
    30-Apr-2017     2899         Apr-2017    

3 変数を含む table を作成します。

groupID = [1 2 3 1 2 3 1 2 3]';
height = [62 61 59 66 70 72 57 67 71]';
gender = ["M" "F" "F" "M" "M" "F" "M" "M" "M"]';
T = table(groupID,height,gender)
T=9×3 table
    groupID    height    gender
    _______    ______    ______

       1         62       "M"  
       2         61       "F"  
       3         59       "F"  
       1         66       "M"  
       2         70       "M"  
       3         72       "F"  
       1         57       "M"  
       2         67       "M"  
       3         71       "M"  

ID 番号でグループ化し、グループ メンバーすべての身長が 60 以上の行を返します。

G1 = groupfilter(T,'groupID',@(x) min(x) >= 60,'height')
G1=3×3 table
    groupID    height    gender
    _______    ______    ______

       2         61       "F"  
       2         70       "M"  
       2         67       "M"  

グループ メンバーすべてが男性である行を返します。

G2 = groupfilter(T,'groupID',@(x) all(x == "M"),'gender')
G2=3×3 table
    groupID    height    gender
    _______    ______    ______

       1         62       "M"  
       1         66       "M"  
       1         57       "M"  

ID 番号と性別でグループ化し、各グループで男性と女性の最大身長を含む行を返します。

G3 = groupfilter(T,{'groupID','gender'},@(x) x == max(x))
G3=5×3 table
    groupID    height    gender
    _______    ______    ______

       2         61       "F"  
       1         66       "M"  
       2         70       "M"  
       3         72       "F"  
       3         71       "M"  

日付のベクトルと、対応する利益額のベクトルを作成します。

timeStamps = datetime([2017 3 4; 2017 3 2; 2017 3 15; 2017 3 10; ...
                       2017 3 14; 2017 3 31; 2017 3 25; ...
                       2017 3 29; 2017 3 21; 2017 3 18]);
profit = [2032 3071 1185 2587 1998 2899 3112 909 2619 3085]';

曜日でグループ化し、各グループの最大利益を計算します。最大利益とその対応するグループを表示します。

[maxDailyProfit,dayOfWeek] = groupfilter(profit,timeStamps,'dayname',@(x) x == max(x))
maxDailyProfit = 5×1

        3071
        1185
        2899
        3112
        2619

dayOfWeek = 5x1 categorical array
     Thursday 
     Wednesday 
     Friday 
     Saturday 
     Tuesday 

入力引数

すべて折りたたむ

入力データ。table または timetable として指定します。

入力配列。ベクトルまたは行列として指定します。

グループ化変数またはベクトル。スカラー、ベクトル、行列、cell 配列、または関数ハンドルとして指定します。

入力が table または timetable の場合、groupvars はグループの計算に使用する列を表し、次のいずれかにできます。

  • 単一の table 変数名を指定する文字ベクトルまたは string スカラー

  • 各要素が table 変数名である、文字ベクトルの cell 配列または string 配列

  • table 変数インデックスのベクトル

  • 各要素が table 変数に対応する logical ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

  • 入力として table 変数をとり、logical スカラーを返す関数ハンドル

配列入力の場合、groupvarsA と同じ行数をもつ列ベクトルか、行列内あるいは cell 配列内に配置した列ベクトルのグループのいずれかにすることができます。

例: 'Age'

例: {'Height','Weight'}

計算方法。関数ハンドルとして指定します。

method は、各グループからメンバーをフィルターで除外するために使用される関数を定義します。この関数は、logical スカラーを返すか、入力データと同じ行数をもち、選択するグループ メンバーを示す logical 列ベクトルを返さなければなりません。関数が logical スカラーを返す場合、グループのすべてのメンバーがフィルターで除外されるか (値が false のとき)、何も除外されません (値が true のとき)。関数が logical ベクトルを返す場合、対応する要素が false であるグループ メンバーがフィルターで除外されます。対応する要素が true であるメンバーが保持されます。

関数ハンドルを定義するには、@(inputargs) myfunc の形式の構文を使用します。ここで myfuncinputargs に依存します。たとえば、@(x) mean(x) は、変数 x を関数 mean の入力引数として指定します。次に、@(x) mean(x) > 10 のようにフィルター処理の条件を定義できます。これは logical スカラーを返します。この計算は、10 を超える平均をもつグループの行を保持します。詳細については、関数ハンドルの作成無名関数を参照してください。

groupfilter が一度に複数の非グループ化変数を適用する場合、行を保持するために、メソッドは各変数について true を返さなければなりません。

ビン化スキーム。次のいずれかのオプションとして指定します。

  • ビン化しないことを示す 'none'

  • 数値ベクトルまたは datetime ベクトル (datetime グループ化変数の場合) として指定されるビン エッジのリスト

  • 整数値スカラーとして指定されるビン数

  • ビンの幅を示す duration 型または calendarDuration 型のスカラーとして指定される時間範囲 (datetime または duration グループ化変数の場合のみ)

  • 各グループ化変数のビン化ルールをリストする cell 配列

  • 次のいずれかの文字ベクトルとして指定される時間ビン (datetime または duration グループ化変数の場合のみ)

    説明データ型
    'second'

    各ビンは 1 秒です。

    datetimeduration
    'minute'

    各ビンは 1 分です。

    datetimeduration
    'hour'

    各ビンは 1 時間です。

    datetimeduration
    'day'

    各ビンは 1 カレンダー日です。この値には、夏時間のシフトが考慮されます。

    datetimeduration
    'week'各ビンは 1 カレンダー週です。datetime のみ
    'month'各ビンは 1 カレンダー月です。datetime のみ
    'quarter'各ビンは 1 カレンダー四半期です。datetime のみ
    'year'

    各ビンは 1 カレンダー年です。この値には、うるう日が考慮されます。

    datetimeduration
    'decade'各ビンは 10 年 (10 カレンダー年) です。datetime のみ
    'century'各ビンは 1 世紀 (100 カレンダー年) です。datetime のみ
    'secondofminute'

    ビンは 0 から 59 までの秒です。

    datetime のみ
    'minuteofhour'

    ビンは 0 から 59 までの分です。

    datetime のみ
    'hourofday'

    ビンは 0 から 23 までの時間です。

    datetime のみ
    'dayofweek'

    ビンは 1 から 7 までの曜日です。週の始まりは日曜日です。

    datetime のみ
    'dayname'ビンは 'Sunday' などの完全な曜日名です。datetime のみ
    'dayofmonth'ビンは 1 から 31 までの日です。datetime のみ
    'dayofyear'ビンは 1 から 366 までの日です。datetime のみ
    'weekofmonth'ビンは 1 から 6 までの週です。datetime のみ
    'weekofyear'ビンは 1 から 54 までの週です。datetime のみ
    'monthname'ビンは 'January' などの完全な月名です。datetime のみ
    'monthofyear'

    ビンは 1 から 12 までの月です。

    datetime のみ
    'quarterofyear'ビンは 1 から 4 までの四半期です。datetime のみ

複数のグループ化変数を指定する場合、すべてのグループ化変数に適用される 1 つのビン化ルールを指定するか、グループ化変数ごとのビン化メソッドが格納された cell 配列 ({'none',[0 2 4 Inf]} など) を指定することができます。

含めるビン エッジ。'left' または 'right' のいずれかとして指定し、ビン区間のどちらの端が含まれるかを示します。

この引数は、groupbins が指定され、かつその値によりすべてのグループ化変数またはグループ化ベクトルにすべてのビン化スキームが適用される場合にのみ指定できます。

table 入力または timetable 入力のデータ変数。スカラー、ベクトル、cell 配列または関数ハンドルとして指定します。datavars はメソッドを適用する入力テーブルの列を示し、次のオプションのいずれかにすることができます。

  • 単一の table 変数名を指定する文字ベクトルまたは string スカラー

  • 各要素が table 変数名である、文字ベクトルの cell 配列または string 配列

  • table 変数インデックスのベクトル

  • 各要素が table 変数に対応する logical ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

  • 入力として table 変数をとり、logical スカラーを返す関数ハンドル

datavars が指定されない場合、groupfilter はそれぞれの非グループ化変数に計算を適用します。

例: 'Profit'

例: {'Income','Expenses'}

例: @isnumeric

出力引数

すべて折りたたむ

出力 table。フィルター処理されていないデータの行を含む table として返されます。

出力配列。フィルター処理されていないデータを含むベクトルまたは行列として返されます。

配列の入力データのグループ化ベクトル。列ベクトル、または列ベクトルの cell 配列として返されます。BG は、A のフィルター処理されていない行に対応するグループ化ベクトルの行を含みます。

R2019b で導入