Main Content

findgroups

グループを見つけてグループ番号を返す

説明

データをグループに分割し、グループに関数を適用するには、関数 findgroups と関数 splitapply を一緒に使用します。データのグループに対する計算の詳細については、データ グループに対する計算を参照してください。

G = findgroups(A) は、グループ化変数 A から作成されたグループ番号のベクトル G を返します。出力引数 G には 1 ~ N の整数値が含まれ、AN 個の一意の値に対応する N 個の異なるグループがあることを示します。たとえば、A["b","a","a","b"] である場合、findgroupsG[2 1 1 2] として返します。

G を使用して他の変数のデータ グループを分割するには、それを入力引数として関数 splitapply に渡します。

関数 findgroups は、空の文字ベクトルと、A 内にある NaN 値、NaT 値および未定義の categorical 値を欠損値として扱い、対応する G の要素として NaN を返します。

G = findgroups(A1,...,AN)A1,...,AN からグループ番号を作成します。関数 findgroups は、A1,...,AN の値の一意の組み合わせとしてグループを定義します。たとえば、A1["a","a","b","b"]A2[0 1 0 0] である場合、findgroups(A1,A2)G[1 2 3 3] として返します。これは "b" 0 の組み合わせが 2 つあるからです。

また、[G,ID] = findgroups(A) は、各グループの一意の値を ID に返します。たとえば、A["b","a","a","b"] である場合、findgroupsG[2 1 1 2] として、また ID["a","b"] として返します。引数 AID は同じデータ型ですが、必ずしも同じサイズとは限りません。

また、[G,ID1,...,IDN] = findgroups(A1,...,AN) は、各グループの一意の値を ID1,...,IDN にわたって返します。ID1,...,IDN の値がグループを定義します。たとえば、A1["a","a","b","b"]A2[0 1 0 0] である場合、findgroups(A1,A2)G[1 2 3 3] として、また ID1 および ID2 をそれぞれ ["a","a","b"] および [0 1 0] として返します。

G = findgroups(T) は、table T の変数から作成されたグループ番号のベクトル G を返します。関数 findgroups は、T のすべての変数をグループ化変数として扱います。

また、[G,TID] = findgroups(T) は各グループの一意の値を含む table TID も返します。TID には、T の変数に対する値の一意の組み合わせが含まれます。T および TID の変数は同じ名前ですが、テーブルの行数が必ずしも同じとは限りません。

すべて折りたたむ

グループ番号を使用して、患者の体重の測定値を喫煙者と非喫煙者の体重グループに分割します。次に、各グループの患者の平均体重を計算します。

サンプル ファイル patients.mat から患者データを読み込みます。

load patients
whos Smoker Weight
  Name          Size            Bytes  Class      Attributes

  Smoker      100x1               100  logical              
  Weight      100x1               800  double               

findgroups でグループを指定します。G の各要素は、患者がどのグループに属するかを指定するグループ番号です。グループ 1 には非喫煙者が含まれ、グループ 2 には喫煙者が含まれます。

G = findgroups(Smoker)
G = 100×1

     2
     1
     1
     1
     1
     1
     2
     1
     1
     1
      ⋮

患者の体重を表示します。

Weight
Weight = 100×1

   176
   163
   131
   133
   119
   142
   142
   180
   183
   132
      ⋮

G を使用して、配列 Weight を 2 つの体重グループに分割します。関数 mean を適用します。非喫煙者の平均体重は、喫煙者の平均体重より少し少なくなっています。

meanWeights = splitapply(@mean,Weight,G)
meanWeights = 2×1

  149.9091
  161.9412

患者のグループの平均体重を計算します。このケースでは、喫煙者または非喫煙者というステータスと、受診した病院によって患者をグループ分けします。データ セットには 3 つの病院があるため、患者グループは 6 つになります。

サンプル ファイル patients.mat から患者の病院の場所、喫煙状況、体重を読み込みます。

load patients
whos Location Smoker Weight
  Name            Size            Bytes  Class      Attributes

  Location      100x1             14208  cell                 
  Smoker        100x1               100  logical              
  Weight        100x1               800  double               

Location 配列と Smoker 配列を表示します。

Location
Location = 100x1 cell
    {'County General Hospital'  }
    {'VA Hospital'              }
    {'St. Mary's Medical Center'}
    {'VA Hospital'              }
    {'County General Hospital'  }
    {'St. Mary's Medical Center'}
    {'VA Hospital'              }
    {'VA Hospital'              }
    {'St. Mary's Medical Center'}
    {'County General Hospital'  }
    {'County General Hospital'  }
    {'St. Mary's Medical Center'}
    {'VA Hospital'              }
    {'VA Hospital'              }
    {'St. Mary's Medical Center'}
    {'VA Hospital'              }
    {'St. Mary's Medical Center'}
    {'VA Hospital'              }
    {'County General Hospital'  }
    {'County General Hospital'  }
    {'VA Hospital'              }
    {'VA Hospital'              }
    {'VA Hospital'              }
    {'County General Hospital'  }
    {'County General Hospital'  }
    {'VA Hospital'              }
    {'VA Hospital'              }
    {'County General Hospital'  }
    {'County General Hospital'  }
    {'County General Hospital'  }
      ⋮

Smoker
Smoker = 100x1 logical array

   1
   0
   0
   0
   0
   0
   1
   0
   0
   0
      ⋮

場所と喫煙状況を使用して、グループを指定します。G には 1 ~ 6 の整数が含まれます。これは、SmokerLocation の値の可能な組み合わせが 6 通りあるためです。

G = findgroups(Location,Smoker)
G = 100×1

     2
     5
     3
     5
     1
     3
     6
     5
     3
     1
      ⋮

各グループの平均体重を計算します。喫煙状況による変化よりも、場所による変化の方が少なくなっています。

meanWeights = splitapply(@mean,Weight,G)
meanWeights = 6×1

  150.1739
  159.8125
  146.8947
  158.4000
  152.0417
  165.9231

患者のグループについて平均体重を計算し、結果をテーブルに表示します。平均体重をグループ ID と関連付けるには、findgroups の 2 番目の出力引数を使用します。

サンプル ファイル patients.mat から患者の体重と喫煙状況を読み込みます。

load patients
whos Smoker Weight
  Name          Size            Bytes  Class      Attributes

  Smoker      100x1               100  logical              
  Weight      100x1               800  double               

findgroups を使用してグループを指定します。出力引数 ID の値は、findgroups がグループ化変数から検出するグループのラベルです。

[G,ID] = findgroups(Smoker)
G = 100×1

     2
     1
     1
     1
     1
     1
     2
     1
     1
     1
      ⋮

ID = 2x1 logical array

   0
   1

平均体重を計算します。平均体重を含むテーブルを作成します。

meanWeight = splitapply(@mean,Weight,G);
T = table(ID,meanWeight,'VariableNames',["Smokers","Mean Weights"])
T=2×2 table
    Smokers    Mean Weights
    _______    ____________

     false        149.91   
     true         161.94   

患者のグループについて平均体重を計算し、結果をテーブルに表示します。このケースでは、喫煙者または非喫煙者というステータスと、受診した病院によって患者をグループ分けします。

サンプル ファイル patients.mat から患者の病院の場所、喫煙状況、体重を読み込みます。

load patients
whos Location Smoker Weight
  Name            Size            Bytes  Class      Attributes

  Location      100x1             14208  cell                 
  Smoker        100x1               100  logical              
  Weight        100x1               800  double               

Location を string 配列に変換します。次に、場所と喫煙状況を使用してグループを指定します。入力として 2 つのグループ化変数を指定するため、追加出力として 2 つのグループ ID を指定できます。場所と喫煙状況の可能な組み合わせは 6 通りあります。ID1ID2 を合わせると、6 つのグループの ID になります。

Location = string(Location);
[G,ID1,ID2] = findgroups(Location,Smoker)
G = 100×1

     2
     5
     3
     5
     1
     3
     6
     5
     3
     1
      ⋮

ID1 = 6x1 string
    "County General Hospital"
    "County General Hospital"
    "St. Mary's Medical Center"
    "St. Mary's Medical Center"
    "VA Hospital"
    "VA Hospital"

ID2 = 6x1 logical array

   0
   1
   0
   1
   0
   1

各グループの平均体重を計算します。

meanWeights = splitapply(@mean,Weight,G)
meanWeights = 6×1

  150.1739
  159.8125
  146.8947
  158.4000
  152.0417
  165.9231

患者の各グループの平均体重を含むテーブルを作成します。

T = table(ID1,ID2,meanWeights,'VariableNames',["Hospital","Smoker","Mean Weight"])
T=6×3 table
             Hospital              Smoker    Mean Weight
    ___________________________    ______    ___________

    "County General Hospital"      false       150.17   
    "County General Hospital"      true        159.81   
    "St. Mary's Medical Center"    false       146.89   
    "St. Mary's Medical Center"    true         158.4   
    "VA Hospital"                  false       152.04   
    "VA Hospital"                  true        165.92   

テーブル内のグループ化変数を使用して、患者の平均体重を計算します。

患者 100 人の病院の場所と喫煙状況をテーブルに読み込みます。

load patients
T = table(Location,Smoker)
T=100×2 table
              Location               Smoker
    _____________________________    ______

    {'County General Hospital'  }    true  
    {'VA Hospital'              }    false 
    {'St. Mary's Medical Center'}    false 
    {'VA Hospital'              }    false 
    {'County General Hospital'  }    false 
    {'St. Mary's Medical Center'}    false 
    {'VA Hospital'              }    true  
    {'VA Hospital'              }    false 
    {'St. Mary's Medical Center'}    false 
    {'County General Hospital'  }    false 
    {'County General Hospital'  }    false 
    {'St. Mary's Medical Center'}    false 
    {'VA Hospital'              }    false 
    {'VA Hospital'              }    true  
    {'St. Mary's Medical Center'}    false 
    {'VA Hospital'              }    true  
      ⋮

T の変数 Smoker および Location を使用して、患者のグループを指定します。

G = findgroups(T)
G = 100×1

     2
     5
     3
     5
     1
     3
     6
     5
     3
     1
      ⋮

データ配列 Weight から平均体重を計算します。

meanWeights = splitapply(@mean,Weight,G)
meanWeights = 6×1

  150.1739
  159.8125
  146.8947
  158.4000
  152.0417
  165.9231

病院の場所と喫煙者または非喫煙者としての状況でグループ化された患者について、平均体重のテーブルを作成します。

患者の病院の場所と喫煙状況をテーブルに読み込みます。Location を string 配列に変換します。

load patients
Location = string(Location);
T = table(Location,Smoker)
T=100×2 table
             Location              Smoker
    ___________________________    ______

    "County General Hospital"      true  
    "VA Hospital"                  false 
    "St. Mary's Medical Center"    false 
    "VA Hospital"                  false 
    "County General Hospital"      false 
    "St. Mary's Medical Center"    false 
    "VA Hospital"                  true  
    "VA Hospital"                  false 
    "St. Mary's Medical Center"    false 
    "County General Hospital"      false 
    "County General Hospital"      false 
    "St. Mary's Medical Center"    false 
    "VA Hospital"                  false 
    "VA Hospital"                  true  
    "St. Mary's Medical Center"    false 
    "VA Hospital"                  true  
      ⋮

T の変数 Location および Smoker を使用して、患者のグループを指定します。出力 table TID はグループを識別します。

[G,TID] = findgroups(T);
TID
TID=6×2 table
             Location              Smoker
    ___________________________    ______

    "County General Hospital"      false 
    "County General Hospital"      true  
    "St. Mary's Medical Center"    false 
    "St. Mary's Medical Center"    true  
    "VA Hospital"                  false 
    "VA Hospital"                  true  

データ配列 Weight から平均体重を計算します。平均体重を TID に追加します。

TID.meanWeight = splitapply(@mean,Weight,G)
TID=6×3 table
             Location              Smoker    meanWeight
    ___________________________    ______    __________

    "County General Hospital"      false       150.17  
    "County General Hospital"      true        159.81  
    "St. Mary's Medical Center"    false       146.89  
    "St. Mary's Medical Center"    true         158.4  
    "VA Hospital"                  false       152.04  
    "VA Hospital"                  true        165.92  

入力引数

すべて折りたたむ

グループ化変数。ベクトルとして指定します。A の一意の値がグループを識別します。グループ化変数は、表にリストされているデータ型を使用して指定できます。

グループを指定する値

グループ化変数のデータ型

数字

数値または logical ベクトル

テキスト

string 配列または文字ベクトルの cell 配列

日付と時刻

datetimeduration または calendarDuration ベクトル

カテゴリ

categorical ベクトル

ビン

ビン化された値のベクトル。数値、datetime または duration 値の連続分布をビン化することによって作成される

グループ化変数。テーブルとして指定します。findgroups は各 table 変数を個別のグループ化変数として扱います。

テーブル変数は、数値、logical、string、categoricaldatetimedurationcalendarDuration ベクトル、または文字ベクトルの cell 配列のいずれかになります。

出力引数

すべて折りたたむ

グループ番号。正の整数のベクトルとして返されます。グループ化変数内で N 個のグループが識別された場合、1 ~ N の各整数が 1 つのグループを指定します。グループ化変数に欠損 string、空の文字ベクトル、NaN 値、NaT 値、または未定義の categorical 値が含まれる場合、G には NaN が含まれます。

  • グループ化変数がベクトルである場合、G およびグループ化変数はすべて同じサイズになります。

  • グループ化変数がテーブル内にある場合、G の長さはテーブルの行数に等しくなります。

各グループを識別する値。入力引数 A から並べ替えた一意の値のベクトルとして返されます。ID のデータ型は、A のデータ型と同じです。

各グループを識別する一意の値のテーブル。テーブルとして返されます。TID の変数には、T の対応する変数から取得した一意の値を並べ替えた値が格納されます。ただし、TID および T の行数は必ずしも同じとは限りません。

詳細

すべて折りたたむ

データ グループに対する計算

データ解析では、データ グループに対して計算を実行するのが一般的です。このような計算では、1 つ以上のデータ変数をデータ グループに分割し、各グループに対して計算を実行し、結果を 1 つ以上の出力変数に結合します。1 つ以上の "グループ化変数" を使用してグループを指定できます。グループ化変数の一意の値は、データ変数の対応する値が属するグループを定義します。

たとえばこの図は、6 行 1 列の数値ベクトルを 2 つのデータ グループに分け、各グループの平均を計算し、その出力を 2 行 1 列の数値ベクトルにまとめる単純なグループ化計算を示しています。6 行 1 列のグループ化変数には、ABXYZ の 2 つの一意の値があります。

Calculation that splits a data variable based on a grouping variable, performs calculations on individual groups of data by applying the same function, and then concatenates the outputs of those function calls

数値、テキスト、日時、カテゴリ、またはビンをもつグループ化変数を指定できます。

拡張機能

バージョン履歴

R2015b で導入