Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

unstack

単一変数からデータを取り出して複数変数に入れる

説明

U = unstack(S,vars,ivar) は、table または timetable S を、同等のスタック解除された table または timetable U に変換します。varsS の変数を指定し、そのそれぞれが U の複数の変数にスタック解除されます。一般に、US よりも変数は多く、行は少なく含みます。

ivar 入力引数は、unstack で指標変数として使用する S の変数を指定します。ivar の値により、vars から取得された要素がスタック解除後に U のどの変数に格納されるかが決まります。

関数 unstack での残りの変数の処理は table と timetable とで異なります。

  • S が table の場合、unstack は残りの変数をグループ化変数として扱います。グループ化変数の値の一意の組み合わせはそれぞれ、S の行のグループを識別します。この行グループが U の単一の行にスタック解除されます。

  • S が timetable の場合、unstack は残りの変数を破棄します。ただし、unstack は行時間のベクトルをグループ化変数として扱います。

table の行名または timetable の行時間をスタック解除したり、いずれかを指標変数として指定することはできません。引数 'ConstantVariables' を使用して、行名または行時間を定数変数として指定できます。

U = unstack(S,vars,ivar,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して、table または timetable S を変換します。

たとえば、unstackS の変数を U の変数に変換する方法を指定できます。

[U,is] = unstack(___) は、U の行と S の行の対応を示すインデックス ベクトル is も返します。前の入力引数のいずれも使用できます。

すべて折りたたむ

さまざまな都市のさまざまな荒天について、降雪量を示すテーブルを作成します。この table には固定された都市名のセットがあるため、categorical 配列を使用して都市を指定します。

Storm = [3;3;1;3;1;1;4;2;4;2;4;2];
Town = categorical({'Natick';'Worcester';'Natick';'Boston';'Boston';'Worcester';...
                    'Boston';'Natick';'Worcester';'Worcester';'Natick';'Boston'});
Snowfall = [0;3;5;5;9;10;12;13;15;16;17;21];

S = table(Storm,Town,Snowfall)
S=12×3 table
    Storm      Town       Snowfall
    _____    _________    ________

      3      Natick           0   
      3      Worcester        3   
      1      Natick           5   
      3      Boston           5   
      1      Boston           9   
      1      Worcester       10   
      4      Boston          12   
      2      Natick          13   
      4      Worcester       15   
      2      Worcester       16   
      4      Natick          17   
      2      Boston          21   

S には、各荒天の積雪量エントリが 1 つの都市ごとに 1 つ、合計 3 つ存在します。S はスタックされた形式で、Towncategorical データ型を持ちます。categorical データ型を持つ table 変数は、スタック解除に役立つ指標変数およびグループ化変数です。

変数 Snowfall を、変数 Town で指定された都市ごとに 1 つ、3 つの変数に分割します。出力テーブル U はスタック解除された形式です。

U = unstack(S,'Snowfall','Town')
U=4×4 table
    Storm    Boston    Natick    Worcester
    _____    ______    ______    _________

      3         5         0          3    
      1         9         5         10    
      4        12        17         15    
      2        21        13         16    

U の各行には、グループ化変数 Storm の同じ値をもつ、S の行からのデータが含まれます。Storm の一意の値の順番は、U 内のデータの順番を決定します。

データをスタック解除し、指標変数において同じ値をもつ同じグループ内の複数の行に、集積関数を適用します。

2 日間にわたる 2 つの株価に関するデータを含む timetable を作成します。行時間を指定するには、datetime 値を使用します。この timetable は固定された一連の株名を持つため、株名は categorical 配列を使用して指定します。

Date = [repmat(datetime('2008-04-12'),6,1);...
        repmat(datetime('2008-04-13'),5,1)];
Stock = categorical({'Stock1';'Stock2';'Stock1';'Stock2';...
                     'Stock2';'Stock2';'Stock1';'Stock2';...
                     'Stock2';'Stock1';'Stock2'});
Price = [60.35;27.68;64.19;25.47;28.11;27.98;...
         63.85;27.55;26.43;65.73;25.94];

S = timetable(Date,Stock,Price)
S=11×2 timetable
       Date        Stock     Price
    ___________    ______    _____

    12-Apr-2008    Stock1    60.35
    12-Apr-2008    Stock2    27.68
    12-Apr-2008    Stock1    64.19
    12-Apr-2008    Stock2    25.47
    12-Apr-2008    Stock2    28.11
    12-Apr-2008    Stock2    27.98
    13-Apr-2008    Stock1    63.85
    13-Apr-2008    Stock2    27.55
    13-Apr-2008    Stock2    26.43
    13-Apr-2008    Stock1    65.73
    13-Apr-2008    Stock2    25.94

S には、初日の Stock1 の 2 つの価格と、初日の Stock2 の 4 つの価格が含まれます。

各株の個別の変数と、各日について 1 行を含む timetable を作成します。Date (行時間のベクトル) をグループ化変数として使用し、集積関数 @mean を、各グループの変数 Price の数値に適用します。

[U,is] = unstack(S,'Price','Stock',...
                 'AggregationFunction',@mean)
U=2×2 timetable
       Date        Stock1    Stock2
    ___________    ______    ______

    12-Apr-2008    62.27     27.31 
    13-Apr-2008    64.79     26.64 

is = 2×1

     1
     7

U は、日付別にグループ化された株ごとの平均価格を含みます。

is は、S の行の各グループに対する最初の値のインデックスを識別します。日付が 2008 年 4 月 13 日のグループの最初の値は、S の 7 番目の行にあります。

入力引数

すべて折りたたむ

入力テーブル。table または timetable として指定します。S はスタック解除するデータ変数 vars と、指標変数 ivar を含まなければなりません。S の残りの変数は、グループ化変数または定数変数のいずれかとして扱うことができます。

スタック解除する S の変数。正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern スカラー、または logical ベクトルとして指定します。

S の指標変数。正の整数、文字ベクトル、または string スカラーとして指定します。ivar で指定された変数の値により、vars で指定された変数から取得された要素が U のどの変数に格納されるかが決まります。

ivar で指定される変数は、数値ベクトル、logical ベクトル、文字配列、文字ベクトルの cell 配列、string 配列、または categorical ベクトルになります。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: 'AggregationFunction',@mean は、vars の値に集積関数 @mean を適用します。

行のグループを定義する S 内のグループ化変数。'GroupingVariables' と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。S の行の各グループは、U の 1 つの行になります。

S は最初の次元に沿った行ラベルをもつことができます。S が table の場合は、行名をラベルとしてもつことができます。S が timetable の場合、行時間をラベルとしてもたなければなりません。unstack は行ラベルをグループ化変数として扱うことができます。

  • 'GroupingVariables' を指定しない場合、S が timetable であれば、unstack で行時間がグループ化変数として扱われます。

  • 'GroupingVariables' を指定する場合、S に含まれる行名または行時間は、'GroupingVariables' の値に含めないと unstack でグループ化変数として扱われません。

グループ内の変数定数。'ConstantVariables' と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。

U のこれらの変数の値は、S の各グループの最初の行から取得されます。

'ConstantVariables' の値を指定する場合、S の行名または行時間を含めることができます。

U の新しいデータ変数の名前。'NewDataVariableNames' と、文字ベクトルの cell 配列または string 配列で構成されるコンマ区切りのペアとして指定します。

'NewDataVariableNames' を指定しない場合、unstackU の新しいデータ変数の名前を ivar で指定された指標変数の値に基づいて作成します。

vars の値から単一値への集積関数。'AggregationFunction' と関数ハンドルで構成されるコンマ区切りのペアとして指定します。unstack はこの関数を、ivar に同じ値をもつ同じグループからの行に適用します。この関数はデータ値を単一値に集積しなければなりません。

'AggregationFunction' の値を指定しない場合、unstack は、データ型に応じて異なる既定の集積関数を使用します。

  • 数値データの場合、既定の集積関数は sum です。

  • 非数値データの場合、既定の集積関数は unique です。

スタック解除後に ivar に指定された指標値に対応するデータ値がないために、集積対象のデータ値がない場合、unstack は、スタック解除された出力 table の空の要素を埋めなければなりません。その場合、unstack は、空の配列を入力として集積関数を呼び出します。unstack が埋める値は、入力が空の配列であるときに集積関数が返す値に依存します。

集積対象のデータがない場合に集積関数が返す値

スタック解除 table の空の要素に挿入される値

集積関数でエラーが発生

unstack でエラーが発生します。

空の配列

適切なデータ型の埋め込み値 (NaNNaT"" など)。

例: 集積関数が unique で、それが 0 行 0 列の double 配列を返す場合、unstackNaN を出力 table に挿入します。

スカラー値

集積関数から返されるスカラー値。

例: 集積関数が numel で、それが 0 を返す場合、unstack は出力 table に 0 を挿入します。

ベクトル、行列、または多次元配列

unstack でエラーが発生します。

U 内の変数の命名規則。'VariableNamingRule' と、値 'modify' または値 'preserve' で構成されるコンマ区切りのペアとして指定します。

'VariableNamingRule' の値は、出力 table または timetable 内の変数について、次の命名規則を指定します。

'VariableNamingRule' の値

規則

'modify' (既定)

出力内の対応する変数名が有効な MATLAB® 識別子となるように、入力 table または timetable から取得された名前を変更します。

'preserve'

入力 table または timetable から取得された元の名前を保持します。出力内の対応する変数名には、空白や非 ASCII 文字を含む任意の Unicode® 文字を使用できます。

メモ: 場合によっては、'preserve' が規則であっても、unstack は元の名前を変更しなければなりません。次のような場合が含まれます。

  • 重複した名前

  • table の次元名と競合する名前

  • 予約名と競合する名前

  • namelengthmax の値を超える長さの名前

出力引数

すべて折りたたむ

出力テーブル。table または timetable として返されます。U にはスタック解除されたデータ変数、グループ化変数および任意の定数変数からの各グループの最初の値が含まれます。

U のデータの順番は、グループ化変数の一意の値の順番に基づきます。

U には、説明、変数単位、変数名、行名などの追加のメタデータを格納できます。詳細については、table または timetable のプロパティの節を参照してください。

S のインデックス。列ベクトルとして返されます。U の各行に対して、インデックス ベクトル isS の対応する行グループ内の最初の値のインデックスを識別します。

詳細

すべて折りたたむ

グループ化変数

グループ化変数は、データのグループ化や分類のために使用するユーティリティ変数です。グループ化変数はグループ別にデータを要約または可視化する場合に便利です。1 つ以上のグループ化変数を指定することで、テーブルでグループを定義できます。

グループ化変数は次の任意のデータ型です。

  • categorical ベクトル

  • 文字ベクトルの cell 配列

  • string 配列

  • 文字配列

  • 数値ベクトル (通常は正の整数を含みます)

  • logical ベクトル

グループ化変数の値が同じである行は同じグループに属します。複数のグループ化変数を使用する場合、グループ化変数の値と同じ組み合わせをもつ行は同じグループに属します。

ヒント

  • S の複数のデータ変数を指定できます。各変数は U のスタック解除された一連のデータ変数になります。正の整数のベクトル、複数の変数名を格納する cell 配列か string 配列、または logical ベクトルを使用して、vars を指定します。入力引数 ivar によって指定された 1 つの指標変数が、vars によって指定されたすべてのデータ変数に適用されます。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2013b で導入

すべて展開する

参考

関数

ライブ エディター タスク