Main Content

unstack

(非推奨) 単一変数からデータ セット配列を取り出して複数変数に入れる

dataset データ型は推奨されません。異種混合データを処理するには、代わりに MATLAB® table データ型を使用します。詳細は、MATLAB table ドキュメンテーションを参照してください。

構文

A = unstack(B,datavar,indvar)
[A,iB] = unstack(B,datavar,indvar)
A = unstack(B,datavar,indvar,'Parameter',value)

説明

A = unstack(B,datavar,indvar) は、データセット配列 B 内の単一の変数の連結を解除して、A 内の複数の変数にします。一般に、A は、B より多くの変数、少ない観測値が格納されます。

datavar は、B から取り出すデータ変数を指定します。indvar は、A のどの変数に datavar の各値を取り出すかを決定する B の指標変数を指定します。unstack は、B の残りの変数をグループ化変数として扱います。値の一意の組み合わせはそれぞれ、B の観測値で構成されるグループを指定します。この観測値が A の単一の観測値に投入されます。

unstack は、Am 個のデータ変数を作成します。ただし、mindvar のグループ レベルの数です。indvar の値は、これら m 個の変数のうちどれが datavar のどの値を受け取るのかを示します。Aj 番目のデータ変数には、datavar の値が格納されます。この値は、indvar 値が m 個のうちで j 番目のレベルであった観測値に対応します。これら m 個の変数の要素のうち、対応するデータ値が B にない要素には、既定値が格納されます。

datavar は、正の整数、文字ベクトル、string スカラー、または true 値が 1 つだけ含まれている logical ベクトルです。indvar は、正の整数、変数名、または true 値が 1 つだけ含まれている logical ベクトルです。

[A,iB] = unstack(B,datavar,indvar) は、A 内の観測と B 内の観測の間の対応を示すインデックス ベクトル iB を返します。A の各観測値に対して、iBB の対応する観測値グループ内で最初の観測値のインデックスを格納します。

グループ化変数の詳細は、グループ化変数を参照してください。

入力引数

A = unstack(B,datavar,indvar,'Parameter',value) は、次の名前と値のペアのパラメーターを使用し、unstackB の変数を A の変数にどのように変換するかを制御します。

'GroupVars'観測値のグループを定義する B 内のグループ化変数。groupvars は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。既定の設定は、datavar にも indvar にも列挙されていない B のすべての変数です。
'NewDataVarNames'unstackA 内に作成する必要があるデータ変数の名前を格納する文字ベクトルの cell 配列または string 配列。既定の設定は、indvar で指定されたグループ化変数のグループ名です。
'AggregationFun'datavar の値のサブセットを受け入れて単一の値を返す関数のハンドル。stack は、同じグループの中で同じ値の indvar をもつ観測値にこの関数を適用します。関数はこれらのデータ値を単一の値に集約しなければなりません。この場合、stack を使用して BA から元に戻すことはできません。数値データ変数に対する既定値は @sum です。数値以外の変数の場合、既定値はありません。同じグループ内の複数の観測値が indvar の同じ値をもつ場合、ユーザーが 'AggregationFun' を指定しなければなりません。
'ConstVars'取り出さずに A にコピーする B の変数。A 内のこれらの変数の値は B 内の各グループの最初の観測値から取得されるので、これらの変数は通常は各グループ内で一定になるはずです。ConstVars は、正の整数、正の整数のベクトル、文字ベクトル、string 配列、文字ベクトルの cell 配列、または logical ベクトルです。既定値は変数なしです。

B の複数のデータ変数を指定することもできます。各データ変数は Am 個の変数を要素とする集合になります。この場合は、datavar として正の整数のベクトル、string 配列、変数名が含まれている cell 配列、または logical ベクトルを指定します。indvar では、変数を 1 つしか指定できません。A のデータ変数の各集合の名前は、B の対応するデータ変数の名前に 'NewDataVarNames' で指定された名前を連結したものです。'AggregationFun' で指定された関数は、行が 1 行しかない値を返さなければなりません。

インフルエンザ推定罹患率に関する複数の変数を連結して単一の変数にします。そして、日付別にインフルエンザ推定罹患率の連結を解除します。

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,:)

参考

|