Main Content

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

stack

複数変数のデータを単一変数にスタック

説明

S = stack(U,vars) は、table または timetable U を、スタックされた等価の table または timetable S に変換します。関数 stackvars で指定された U の複数の変数を、S の 1 つの変数にスタックします。一般に、SU よりも少ない変数を含みますが、より多くの行を含みます。

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

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

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

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

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

[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 (https://www.google.org/flutrends)。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 の変数。正の整数、正の整数のベクトル、文字ベクトル、文字ベクトルの cell 配列、string 配列、または logical ベクトルとして指定します。

名前と値のペアの引数

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

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

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

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

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

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

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

S の新しいデータ変数の名前。'NewDataVariableName' と文字ベクトルまたは string スカラーで構成されるコンマ区切りのペアとして指定します。既定の設定では、スタックされた 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 番目の行を作成します。

ヒント

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

拡張機能

R2013b で導入