ドキュメンテーション

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

grouptransform

グループごとの変換

説明

G = grouptransform(T,groupvars,method) は、method の計算を使用して table または timetable のデータを変換し、groupvars で指定された変数を基準にグループ化します。出力 G は table または timetable で、T の非グループ化変数の代わりに変換後のデータが含まれます。たとえば、G = grouptransform(T,'Gender','norm') は 2 ノルムを使用して、T のデータを性別を基準として正規化します。

G = grouptransform(T,groupvars,groupbins,method)groupbins に従って変換後のデータをビン化し、グループを出力 table の末尾に追加変数として配置します。たとえば、G = grouptransform(T,'SaleDate','year','rescale')T のデータを [0,1] の範囲でスケーリングし、販売年を基準にビン化します。

G = grouptransform(___,datavars) は、前述の構文のいずれかについて、変換する table 変数を指定します。

G = grouptransform(___,Name,Value) は、名前と値のペアを 1 つ以上使用して、追加のグループ化プロパティを指定します。たとえば、G = grouptransform(T,'Temp','linearfill','ReplaceValues',false) は、非グループ化変数を置き換えず、埋め込みデータを T の追加変数として追加します。

B = grouptransform(A,groupvars,method) は、A がベクトルまたは行列の場合に、groupvars のグループ化ベクトルの一意の組み合わせに従って変換後のデータを返します。groupvars は列ベクトル、行列、または列ベクトルの cell 配列にすることができます。

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

B = grouptransform(___,Name,Value) は、前述の配列構文のいずれかについて、名前と値のペアを 1 つ以上使用して、追加のグループ化プロパティを指定します。

[B,BG] = grouptransform(A,___) は、各グループ化ベクトルのグループも返します。

すべて折りたたむ

3 チームの進捗ステータスが含まれる timetable を作成します。

timeStamp = days([1 1 1 2 2 2 3 3 3]');
teamNumber = [1 2 3 1 2 3 1 2 3]';
percentComplete = [14.2 28.1 11.5 NaN NaN 19.3 46.1 51.2 30.3]';
T = timetable(timeStamp,teamNumber,percentComplete)
T=9×3 timetable
    timeStamp    teamNumber    percentComplete
    _________    __________    _______________

    1 day            1              14.2      
    1 day            2              28.1      
    1 day            3              11.5      
    2 days           1               NaN      
    2 days           2               NaN      
    2 days           3              19.3      
    3 days           1              46.1      
    3 days           2              51.2      
    3 days           3              30.3      

線形内挿を使用して、各グループの欠損したステータスのパーセンテージ (NaN) を埋めます。

G = grouptransform(T,'teamNumber','linearfill','percentComplete')
G=9×3 timetable
    timeStamp    teamNumber    percentComplete
    _________    __________    _______________

    1 day            1               14.2     
    1 day            2               28.1     
    1 day            3               11.5     
    2 days           1              30.15     
    2 days           2              39.65     
    2 days           3               19.3     
    3 days           1               46.1     
    3 days           2               51.2     
    3 days           3               30.3     

変数 percentComplete を置き換えずに元の table に埋め込みデータを追加するには、'ReplaceValues' パラメーターを使用します。

Gappend = grouptransform(T,'teamNumber','linearfill','percentComplete','ReplaceValues',false)
Gappend=9×4 timetable
    timeStamp    teamNumber    percentComplete    linearfill_percentComplete
    _________    __________    _______________    __________________________

    1 day            1              14.2                     14.2           
    1 day            2              28.1                     28.1           
    1 day            3              11.5                     11.5           
    2 days           1               NaN                    30.15           
    2 days           2               NaN                    39.65           
    2 days           3              19.3                     19.3           
    3 days           1              46.1                     46.1           
    3 days           2              51.2                     51.2           
    3 days           3              30.3                     30.3           

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

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]';
T = table(timeStamps,profit)
T=10×2 table
    timeStamps     profit
    ___________    ______

    04-Mar-2017     2032 
    02-Mar-2017     3071 
    15-Mar-2017     1185 
    10-Mar-2017     2587 
    14-Mar-2017     1998 
    31-Mar-2017     2899 
    25-Mar-2017     3112 
    29-Mar-2017      909 
    21-Mar-2017     2619 
    18-Mar-2017     3085 

曜日別にグループ化し、利益を 2 ノルムで正規化します。

G = grouptransform(T,'timeStamps','dayname','norm')
G=10×3 table
    timeStamps     profit     dayname_timeStamps
    ___________    _______    __________________

    04-Mar-2017    0.42069        Saturday      
    02-Mar-2017          1        Thursday      
    15-Mar-2017    0.79344        Wednesday     
    10-Mar-2017    0.66582        Friday        
    14-Mar-2017    0.60654        Tuesday       
    31-Mar-2017    0.74612        Friday        
    25-Mar-2017    0.64428        Saturday      
    29-Mar-2017    0.60864        Wednesday     
    21-Mar-2017    0.79506        Tuesday       
    18-Mar-2017    0.63869        Saturday      

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

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]';

曜日別にグループ化し、利益額を 2 ノルムで正規化します。変換後のデータと、それに対応するグループを表示します。

[normDailyProfit,dayOfWeek] = grouptransform(profit,timeStamps,'dayname','norm')
normDailyProfit = 10×1

    0.4207
    1.0000
    0.7934
    0.6658
    0.6065
    0.7461
    0.6443
    0.6086
    0.7951
    0.6387

dayOfWeek = 10x1 categorical array
     Saturday 
     Thursday 
     Wednesday 
     Friday 
     Tuesday 
     Friday 
     Saturday 
     Wednesday 
     Tuesday 
     Saturday 

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

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

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

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

例: 'Age'

例: {'Height','Weight'}

計算方法。次のいずれかとして指定します。

方法

説明

'zscore'

平均が 0、標準偏差が 1 となるようにデータを正規化

'norm'

2 ノルムでデータを正規化

'meancenter'

平均が 0 となるようにデータを正規化

'rescale'

範囲を [0,1] に再スケーリング

'meanfill'

グループ データの平均値で欠損値を埋める

'linearfill'

欠損していないグループ データの線形内挿で欠損値を埋める

スカラー、または入力データと同じ行数の列ベクトルを返す関数ハンドルを指定することもできます。この関数がスカラーを返す場合、grouptransform は変換後の出力の要素ごとにそのスカラーを繰り返します。

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

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

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

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

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

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

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

例: 'Profit'

例: {'Income','Expenses'}

例: @isnumeric

ビン化方式。次のいずれかのオプションとして指定します。

  • ビン化しないことを示す '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]} など) を指定することができます。

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: G = grouptransform(T,groupvars,groupbins,'zscore','IncludedEdge','right')

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

この名前と値のペアは groupbins が指定されている場合にのみ指定できます。この値は、すべてのグループ化変数またはベクトルで、すべてのビン化方式に適用されます。

変換配置インジケーター。数値または logical 1 (true) または 0 (false) として指定します。パラメーター値が true の場合、grouptransform は入力からの非グループ化変数またはベクトルの代わりに変換後のデータを含む、table または配列を出力します。パラメーター値が false の場合、grouptransform は変換後のデータを行列の追加の列または table 変数として入力データに追加します。

出力引数

すべて折りたたむ

出力 table。各グループの変換後のデータを含む table として返されます。

出力配列。変換後のデータを含むベクトルまたは行列として返されます。

配列の入力データのグループ。グループ化ベクトルに対応する、列ベクトルまたは列ベクトルの cell 配列として返されます。

複数のグループ化ベクトルが使用されている場合、BG は長さが等しい列ベクトルを含む cell 配列となります。グループ情報を確認するには、BG のすべてのベクトルの要素を行単位で参照します。各グループは、出力配列 B の対応する行にマッピングされます。

ヒント

  • grouptransform を何度も呼び出す場合、可能であればパフォーマンス向上のためグループ変数を categorical 型または logical 型に変換することを検討してください。たとえば、char 型のグループ化変数 (要素が 'Male''Female' である Gender など) がある場合、categorical(Gender) コマンドを使用してこれを categorical 値に変換することができます。

拡張機能

R2018b で導入