Main Content

stack

入力 table または timetable のデータを出力 table または timetable の 1 つの変数にスタック

説明

S = stack(U,vars) は、入力 table または timetable U をスタックされた table または timetable S に変換します。この関数は、U の複数の変数の値を S の 1 つの変数にスタックします。入力引数 vars は、スタックする U の変数を名前または U における位置のいずれかで指定します。

U の行数が n 個であり、varsU の変数を m 個指定した場合、Sm*n 行になります。関数 stack は、指定された U の変数の値をインターリーブして S に 1 つの変数を作成します。たとえば、U が 10 行の場合、U の 3 つの変数をスタックすると、S は 30 行になります。一般に、SU よりも少ない変数を含みますが、より多くの行を含みます。

出力 table または timetable S には、S の各行のスタック データが U のどの変数を元にしているかを示す新しい categorical 変数が含まれます。関数 stack は、スタックされない U の変数についてはデータを複製します。

  • U が table の場合、行名はスタックできません。

  • U が timetable の場合、行時間はスタックできません。

S = stack(U,{vars1,...,varsN}){vars1,...,varsN} で指定した変数の値を S の変数 N にスタックします。詳細については、出力での複数のスタックされた変数の作成を参照してください。

S = stack(___,Name,Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用して、table U を変換します。

たとえば、S の新しいスタックされた変数の変数名を指定できます。

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

すべて折りたたむ

テストの得点を含むテーブルを 3 つの別々のテストから作成します。table はスタック解除された形式です。

Test1 = [93;57;87;89];
Test2 = [89;77;92;86];
Test3 = [95;62;89;91];

U = table(Test1,Test2,Test3)
U=4×3 table
    Test1    Test2    Test3
    _____    _____    _____

     93       89       95  
     57       77       62  
     87       92       89  
     89       86       91  

このテーブルは 4 つの列と 3 つの変数で構成されています。

テストの得点を 1 つの変数にスタックします。

S = stack(U,1:3)
S=12×2 table
    Test1_Test2_Test3_Indicator    Test1_Test2_Test3
    ___________________________    _________________

               Test1                      93        
               Test2                      89        
               Test3                      95        
               Test1                      57        
               Test2                      77        
               Test3                      62        
               Test1                      87        
               Test2                      92        
               Test3                      89        
               Test1                      89        
               Test2                      86        
               Test3                      91        

S は 12 個の行と 2 つの変数で構成されています。S はスタックされた形式です。

categorical 変数 Test1_Test2_Test3_Indicator は、スタックされたデータ変数 Test1_Test2_Test3 の得点に対応するテストを特定します。

5 つの異なる荒天から 3 つの都市の降雪量を示す timetable を作成します。datetime 値として荒天の日付を指定し、それらを timetable U の行時間として使用します。この timetable には荒天番号の固定セットがあるため、荒天番号 Storm の配列を categorical 配列として指定します。

Storm = categorical([1;2;3;4;5]);
Date = datetime({'2011-12-25';'2012-01-02';'2012-01-23';'2012-02-07';'2012-02-15'});
Natick = [20;5;13;0;17];
Boston = [18;9;21;5;12];
Worcester = [26;10;16;3;15];

U = timetable(Date,Storm,Natick,Boston,Worcester)
U=5×4 timetable
       Date        Storm    Natick    Boston    Worcester
    ___________    _____    ______    ______    _________

    25-Dec-2011      1        20        18         26    
    02-Jan-2012      2         5         9         10    
    23-Jan-2012      3        13        21         16    
    07-Feb-2012      4         0         5          3    
    15-Feb-2012      5        17        12         15    

変数 StormDate には、各地点の連続したデータが含まれます。

変数 NatickBoston および Worcester を 1 つの変数にスタックします。スタック データ Snowfall を含む変数と、新しい指標変数 Town に名前を付けます。

S = stack(U,{'Natick','Boston','Worcester'},...
          'NewDataVariableName','Snowfall',...
          'IndexVariableName','Town')
S=15×3 timetable
       Date        Storm      Town       Snowfall
    ___________    _____    _________    ________

    25-Dec-2011      1      Natick          20   
    25-Dec-2011      1      Boston          18   
    25-Dec-2011      1      Worcester       26   
    02-Jan-2012      2      Natick           5   
    02-Jan-2012      2      Boston           9   
    02-Jan-2012      2      Worcester       10   
    23-Jan-2012      3      Natick          13   
    23-Jan-2012      3      Boston          21   
    23-Jan-2012      3      Worcester       16   
    07-Feb-2012      4      Natick           0   
    07-Feb-2012      4      Boston           5   
    07-Feb-2012      4      Worcester        3   
    15-Feb-2012      5      Natick          17   
    15-Feb-2012      5      Boston          12   
    15-Feb-2012      5      Worcester       15   

S には各荒天に対して 3 つの行があり、それに対して、stack が定数変数 Storm および Date のデータを繰り返します。

categorical 変数 Town は、U のどの変数に対応する Snowfall データが含まれるかを特定します。

米国東海岸のインフルエンザ推定羅患率を含む timetable を作成します。米国北東部、中部大西洋岸および南部大西洋岸に対して別々の変数を作成します。データ ソース: Google Flu Trends プロジェクト (現在は運用終了)。timetable の行時間として datetime 配列を使用します。

Month = datetime(2005,10,1,'Format','MMMM yyyy') + calmonths(0:5);
Month = Month';
NE = [1.1902; 1.3610; 1.5003; 1.7772; 2.1350; 2.2345];
MidAtl = [1.1865; 1.4120; 1.6043; 1.8830; 2.1227; 1.9920];
SAtl = [1.2730; 1.5820; 1.8625; 1.9540; 2.4803; 2.0203];

fluU = timetable(Month,NE,MidAtl,SAtl)
fluU=6×3 timetable
        Month          NE      MidAtl     SAtl 
    _____________    ______    ______    ______

    October 2005     1.1902    1.1865     1.273
    November 2005     1.361     1.412     1.582
    December 2005    1.5003    1.6043    1.8625
    January 2006     1.7772     1.883     1.954
    February 2006     2.135    2.1227    2.4803
    March 2006       2.2345     1.992    2.0203

変数 Month には、行全体にわたる定数であるデータが含まれます。

変数 NEMidAtl および SAtl を、FluRate という 1 つの変数にスタックします。新しい指標変数に Region という名前を付け、インデックス ベクトル ifluU を出力して、入力するスタック解除 table fluU の行と、出力するスタック table fluS の行の対応関係を示します。

[fluS,ifluU] = stack(fluU,1:3,...
                     'NewDataVariableName','FluRate',...
                     'IndexVariableName','Region')
fluS=18×2 timetable
        Month        Region    FluRate
    _____________    ______    _______

    October 2005     NE        1.1902 
    October 2005     MidAtl    1.1865 
    October 2005     SAtl       1.273 
    November 2005    NE         1.361 
    November 2005    MidAtl     1.412 
    November 2005    SAtl       1.582 
    December 2005    NE        1.5003 
    December 2005    MidAtl    1.6043 
    December 2005    SAtl      1.8625 
    January 2006     NE        1.7772 
    January 2006     MidAtl     1.883 
    January 2006     SAtl       1.954 
    February 2006    NE         2.135 
    February 2006    MidAtl    2.1227 
    February 2006    SAtl      2.4803 
    March 2006       NE        2.2345 
      ⋮

ifluU = 18×1

     1
     1
     1
     2
     2
     2
     3
     3
     3
     4
      ⋮

ifluU(5)2 となります。出力 table fluS の 5 行目に、入力 table fluU の 2 行目のデータが含まれます。

入力引数

すべて折りたたむ

入力テーブル。table または timetable として指定します。

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

例: S = stack(U,1:4) は、U の最初の 4 つの変数を S の 1 つの変数にスタックします。

例: S = stack(U,{'Var1',Var3','Var5'}) は、UVar1Var3、および Var5 という名前の変数をスタックします。

名前と値の引数

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

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

例: 'NewDataVariableName','StackedData' は、新しいデータ変数 StackedData に名前を付けます。

出力に含める vars 以外の変数。'ConstantVariables' と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern スカラー、または logical ベクトルのいずれかで構成される、コンマ区切りのペアとして指定します。stack は、行のスタックされた各エントリについて、定数変数からデータを複製します。

既定の設定では、vars で指定されていない、U の変数をすべて使用します。名前と値のペアの引数 'ConstantVariables' を指定して、vars または 'ConstantVariables' で指定されていない変数を出力テーブル S から除外することができます。

U は最初の次元に沿った行ラベルをもつことができます。U が table の場合は、行名をラベルとしてもつことができます。U が timetable の場合、行時間をラベルとしてもたなければなりません。

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

  • stack は行名または行時間を複製します。これは行名や行時間が 'ConstantVariables' に含まれていない場合でも同様です。

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

S の新しい指標変数の名前。'IndexVariableName' と文字ベクトルまたは string スカラーで構成されるコンマ区切りのペアとして指定します。既定値は NewDataVariableName に基づいた名前です。

出力引数

すべて折りたたむ

スタック テーブル。table または timetable として返されます。S にはスタックされたデータ変数、カテゴリカル指標変数および任意の定数変数をもつ変数が含まれます。

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

stack は、vars でリストされた最初の変数の変数単位および変数の説明のプロパティ値を、対応する新しいデータ変数の S.Properties.VariableUnits および S.Properties.VariableDescrisciptions の値に割り当てます。

U のインデックス。列ベクトルとして返されます。インデックス ベクトル iu は、対応するデータを含む入力テーブル U の行を特定します。stack は、U(iu(j),vars) を使用して、出力テーブル Sj 番目の行を作成します。

アルゴリズム

すべて折りたたむ

出力での複数のスタックされた変数の作成

  • 入力の値を出力の複数の変数にスタックすることが可能です。S にスタックされた変数を複数作成するには、cell 配列を使用して U の変数のグループを複数指定します。vars で複数の値を含める場合は cell 配列を使用し、名前と値のペアの引数 'NewDataVariableName' で複数の値を含める場合は文字ベクトルの cell 配列または string 配列を使用できます。すべてのグループは同数の変数を含まなければなりません。

    たとえば、U に 4 つの変数が含まれている場合、次の構文を使用して、S にスタックされた変数を 1 つだけでなく 2 つ作成できます。

    vars = {[1 2],[3 4]};
    S = stack(U,vars)
    

    この結果、S には、U の 1 番目と 2 番目の変数の値をもつスタックされた変数と U の 3 番目と 4 番目の変数の値をもつスタックされた変数が含まれます。

    S の新しい変数の名前を指定するには、'NewDataVariableName' を使用します。指定する名前の数は、vars で指定するグループの数と等しくなければなりません。

    vars = {[1 2],[3 4]};
    S = stack(U,vars,'NewDataVariableName',{'Vars1And2','Vars3And4'})
    

  • vars を文字ベクトルの cell 配列として指定すると、S には 1 つのスタックされた変数が格納されます。変数名を使用する場合に複数のスタックされた変数を指定するには、文字ベクトルの cell 配列の cell 配列、または string 配列の cell 配列を使用します。

    たとえば、UVar1Var2Var3、および Var4 という名前の変数を含む table である場合、次の構文は S に 1 つのスタックされた変数を作成します。

    S = stack(U,{'Var1','Var2','Var3','Var4'})
    

    次の構文は S に 2 つのスタックされた変数を作成します。

    S = stack(U,{{'Var1','Var2'} {'Var3','Var4'}})
    

拡張機能

バージョン履歴

R2013b で導入