stack
(非推奨) 複数変数のデータ セット配列を単一変数に連結
dataset データ型は推奨されません。異種混合データを処理するには、代わりに MATLAB® table データ型を使用します。詳細は、MATLAB table ドキュメンテーションを参照してください。
構文
B = stack(A,datavars)
[B,iA] = stack(A,datavars)
B = stack(A,datavars,Parameter,value)
説明
B = stack(A,datavars) は、データセット配列 A 内の複数の変数を連結して、B 内の単一の変数にします。一般に、B は A よりも変数は少なく、観測値は多く含みます。
datavars には、A に含まれている m 個のデータ変数に対するグループを指定します。stack は、値をインターリーブすることにより B 内に単一のデータ変数を作成します。A に n 個の観測値が含まれている場合、B は m 行 n 列の観測値になります。つまり、stack は m 個のデータ値を A 内の各観測値から受け取り、これらを連結して B 内の m 個の観測値を作成します。datavars は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。stack は、B 内の各観測値が A 内の m 個のデータ変数のどれに対応するかを示すグループ化変数も B 内に作成します。
stack は、"変数ごとの" プロパティ (たとえば Units や VarDescription) の値を、datavars にリストされた最初の変数に対応するプロパティ値から B の新しいデータ変数に割り当てます。
stack は、残りの変数を A から B に積み上げず、各値を m 回複製してコピーします。これらの変数は一般にグループ化変数です。これらの値は B の m 個の観測値の各グループで一定のため、B の観測値の元になった A の観測値を識別することができます。
[B,iA] = stack(A,datavars) は、B 内の観測と A 内の観測の間の対応を示すインデックス ベクトル iA を返します。stack は、A(iA(j),datavarss) を使用して B(j,:) を作成します。
グループ化変数の詳細は、グループ化変数を参照してください。
入力引数
B = stack(A,datavars, は、次の名前と値のペアのパラメーターを使用し、Parameter,value)stack が A の変数を B の変数にどのように変換するかを制御します。
'ConstVars' | 連結せずに B にコピーする A 内の変数。ConstVars は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。既定の設定では、datavars で指定せずに A の変数をすべて使用します。 |
'NewDataVarName' | B に作成されるデータ変数用の名前。既定の設定では、積み上げられる m 個の変数の名前の連結です。 |
'IndVarName' | B に作成するグループ化変数の名前で、新しいデータ変数の各値の元を示します。既定の設定では、'NewDataVarName' パラメーターに基づきます。 |
A にデータ変数の複数のグループを指定することもでき、この場合、各グループは B の変数になります。すべてのグループは同数の変数を含まなければなりません。datavars について複数のパラメーター値を含めるか、'NewDataVarName' について複数の値を含めるには、文字ベクトルの cell 配列または string 配列を使用します。
例
インフルエンザ推定罹患率に関する複数の変数を連結して単一の変数にします。そして、日付別にインフルエンザ推定罹患率の連結を解除します。
load flu
% FLU has a 'Date' variable, and 10 variables for estimated influenza rates
% (in 9 different regions, estimated from Google searches, plus a
% nationwide estimate from the CDC). Combine those 10 variables into an
% array that has a single data variable, 'FluRate', and an indicator
% variable, 'Region', that says which region each estimate is from.
[flu2,iflu] = stack(flu, 2:11, 'NewDataVarName','FluRate', ...
'IndVarName','Region')
% The second observation in FLU is for 10/16/2005. Find the observations
% in FLU2 that correspond to that date.
flu(2,:)
flu2(iflu==2,:)
% Use the 'Date' variable from that array to split 'FluRate' into 52
% separate variables, each containing the estimated influenza rates for
% each unique date. The new array has one observation for each region. In
% effect, this is the original array FLU "on its side".
dateNames = cellstr(datestr(flu.Date,'mmm_DD_YYYY'));
[flu3,iflu2] = unstack(flu2, 'FluRate', 'Date', ...
'NewDataVarNames',dateNames)
% Since observations in FLU3 represent regions, IFLU2 indicates the first
% occurrence in FLU2 of each region.
flu2(iflu2,:)