stack
入力 table または timetable のデータを出力 table または timetable の 1 つの変数にスタック
説明
は、入力 table または timetable S
= stack(U
,vars
)U
をスタックされた table または timetable S
に変換します。この関数は、U
の複数の変数の値を S
の 1 つの変数にスタックします。入力引数 vars
は、スタックする U
の変数を名前または U
における位置のいずれかで指定します。
U
の行数が n
個であり、vars
で U
の変数を m
個指定した場合、S
は m*n
行になります。関数 stack
は、指定された U
の変数の値をインターリーブして S
に 1 つの変数を作成します。たとえば、U
が 10 行の場合、U
の 3 つの変数をスタックすると、S
は 30 行になります。一般に、S
は U
よりも少ない変数を含みますが、より多くの行を含みます。
出力 table または timetable S
には、S
の各行のスタック データが U
のどの変数を元にしているかを示す新しい categorical
変数が含まれます。関数 stack
は、スタックされない U
の変数についてはデータを複製します。
U
が table の場合、行名はスタックできません。U
が timetable の場合、行時間はスタックできません。
は S
= stack(U
,{vars
1,...,vars
N}){vars1,...,varsN}
で指定した変数の値を S
の変数 N
にスタックします。詳細については、出力での複数のスタックされた変数の作成を参照してください。
は、1 つ以上の名前と値の引数で指定された追加オプションを使用して、table S
= stack(___,Name,Value
)U
を変換します。
たとえば、S
の新しいスタックされた変数の変数名を指定できます。
例
3 つの変数を 1 つにスタック
テストの得点を含むテーブルを 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
変数 Storm
と Date
には、各地点の連続したデータが含まれます。
変数 Natick
、Boston
および 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
には、行全体にわたる定数であるデータが含まれます。
変数 NE
、MidAtl
および 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 行目のデータが含まれます。
入力引数
U
— 入力テーブル
table | timetable
入力テーブル。table または timetable として指定します。
vars
— スタックする U
の変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
スタックする U
の変数。正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、または pattern
スカラーとして指定します。
例: S = stack(U,1:4)
は、U
の最初の 4 つの変数を S
の 1 つの変数にスタックします。
例: S = stack(U,{'Var1',Var3','Var5'})
は、U
の Var1
、Var3
、および Var5
という名前の変数をスタックします。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: 'NewDataVariableName','StackedData'
は、新しいデータ変数 StackedData
に名前を付けます。
ConstantVariables
— 出力に含める vars
以外の変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
出力に含める vars
以外の変数。'ConstantVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルのいずれかで構成される、コンマ区切りのペアとして指定します。stack
は、行のスタックされた各エントリについて、定数変数からデータを複製します。
既定の設定では、vars
で指定されていない、U
の変数をすべて使用します。名前と値のペアの引数 'ConstantVariables'
を指定して、vars
または 'ConstantVariables'
で指定されていない変数を出力テーブル S
から除外することができます。
U
は最初の次元に沿った行ラベルをもつことができます。U
が table の場合は、行名をラベルとしてもつことができます。U
が timetable の場合、行時間をラベルとしてもたなければなりません。
'ConstantVariables'
の値を指定する場合、行名または行時間を含めることができます。stack
は行名または行時間を複製します。これは行名や行時間が'ConstantVariables'
に含まれていない場合でも同様です。
NewDataVariableName
— S
の新しいデータ変数の名前
文字ベクトル | string 配列 | 文字ベクトルの cell 配列
S
の新しいデータ変数の名前。'NewDataVariableName'
と文字ベクトル、string 配列、または文字ベクトルの cell 配列で構成されるコンマ区切りのペアとして指定します。既定の設定では、スタックされた U
からの変数の名前の連結です。
IndexVariableName
— S
の新しい指標変数の名前
文字ベクトル | string スカラー
S
の新しい指標変数の名前。'IndexVariableName'
と文字ベクトルまたは string スカラーで構成されるコンマ区切りのペアとして指定します。既定値は NewDataVariableName
に基づいた名前です。
出力引数
S
— 出力テーブル
table | timetable
スタック テーブル。table または timetable として返されます。S
にはスタックされたデータ変数、カテゴリカル指標変数および任意の定数変数をもつ変数が含まれます。
S
には、説明、変数単位、変数名、行名などの追加のメタデータを格納できます。詳細については、table
または timetable
のプロパティの節を参照してください。
stack
は、vars
でリストされた最初の変数の変数単位および変数の説明のプロパティ値を、対応する新しいデータ変数の S.Properties.VariableUnits
および S.Properties.VariableDescrisciptions
の値に割り当てます。
iu
— U
のインデックス
列ベクトル
U
のインデックス。列ベクトルとして返されます。インデックス ベクトル iu
は、対応するデータを含む入力テーブル U
の行を特定します。stack
は、U(iu(j),vars)
を使用して、出力テーブル S
の j
番目の行を作成します。
アルゴリズム
出力での複数のスタックされた変数の作成
入力の値を出力の複数の変数にスタックすることが可能です。
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 配列を使用します。たとえば、
U
がVar1
、Var2
、Var3
、およびVar4
という名前の変数を含む table である場合、次の構文はS
に 1 つのスタックされた変数を作成します。S = stack(U,{'Var1','Var2','Var3','Var4'})
次の構文は
S
に 2 つのスタックされた変数を作成します。S = stack(U,{{'Var1','Var2'} {'Var3','Var4'}})
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
2 番目の入力引数
vars
は定数でなければなりません。名前と値の引数
'ConstantVariables'
、'NewDataVariableName'
、および'IndexVariableName'
の値は定数でなければなりません。入力引数
vars
と名前と値の引数'ConstantVariables'
の値は、パターン式をサポートしません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2013b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)