unstack
単一変数からデータを取り出して複数変数に入れる
説明
は、table または timetable U
= unstack(S
,vars
,ivar
)S
を、同等のスタック解除された table または timetable U
に変換します。vars
は S
の変数を指定し、そのそれぞれが U
の複数の変数にスタック解除されます。一般に、U
は S
よりも変数は多く、行は少なく含みます。
ivar
入力引数は、unstack
で指標変数として使用する S
の変数を指定します。ivar
の値により、vars
から取得された要素がスタック解除後に U
のどの変数に格納されるかが決まります。
関数 unstack
での残りの変数の処理は table と timetable とで異なります。
S
が table の場合、unstack
は残りの変数をグループ化変数として扱います。グループ化変数の値の一意の組み合わせはそれぞれ、S
の行のグループを識別します。この行グループがU
の単一の行にスタック解除されます。S
が timetable の場合、unstack
は残りの変数を破棄します。ただし、unstack
は行時間のベクトルをグループ化変数として扱います。
table の行名または timetable の行時間をスタック解除したり、いずれかを指標変数として指定することはできません。引数 'ConstantVariables'
を使用して、行名または行時間を定数変数として指定できます。
は、1 つ以上の U
= unstack(S
,vars
,ivar
,Name,Value
)Name,Value
のペアの引数で指定された追加オプションを使用して、table または timetable S
を変換します。
たとえば、unstack
が S
の変数を U
の変数に変換する方法を指定できます。
例
1 つの変数を 3 つの変数に分割
さまざまな都市のさまざまな荒天について、降雪量を示すテーブルを作成します。この table には固定された都市名のセットがあるため、categorical
配列を使用して都市を指定します。
Storm = [3;3;1;3;1;1;4;2;4;2;4;2]; Town = categorical({'Natick';'Worcester';'Natick';'Boston';'Boston';'Worcester';... 'Boston';'Natick';'Worcester';'Worcester';'Natick';'Boston'}); Snowfall = [0;3;5;5;9;10;12;13;15;16;17;21]; S = table(Storm,Town,Snowfall)
S=12×3 table
Storm Town Snowfall
_____ _________ ________
3 Natick 0
3 Worcester 3
1 Natick 5
3 Boston 5
1 Boston 9
1 Worcester 10
4 Boston 12
2 Natick 13
4 Worcester 15
2 Worcester 16
4 Natick 17
2 Boston 21
S
には、各荒天の積雪量エントリが 1 つの都市ごとに 1 つ、合計 3 つ存在します。S
はスタックされた形式で、Town
はcategorical
データ型を持ちます。categorical
データ型を持つ table 変数は、スタック解除に役立つ指標変数およびグループ化変数です。
変数 Snowfall
を、変数 Town
で指定された都市ごとに 1 つ、3 つの変数に分割します。出力テーブル U
はスタック解除された形式です。
U = unstack(S,'Snowfall','Town')
U=4×4 table
Storm Boston Natick Worcester
_____ ______ ______ _________
3 5 0 3
1 9 5 10
4 12 17 15
2 21 13 16
U
の各行には、グループ化変数 Storm
の同じ値をもつ、S
の行からのデータが含まれます。Storm
の一意の値の順番は、U
内のデータの順番を決定します。
各グループへの集積関数の適用
データをスタック解除し、指標変数において同じ値をもつ同じグループ内の複数の行に、集積関数を適用します。
2 日間にわたる 2 つの株価に関するデータを含む timetable を作成します。行時間を指定するには、datetime
値を使用します。この timetable は固定された一連の株名を持つため、株名は categorical
配列を使用して指定します。
Date = [repmat(datetime('2008-04-12'),6,1);... repmat(datetime('2008-04-13'),5,1)]; Stock = categorical({'Stock1';'Stock2';'Stock1';'Stock2';... 'Stock2';'Stock2';'Stock1';'Stock2';... 'Stock2';'Stock1';'Stock2'}); Price = [60.35;27.68;64.19;25.47;28.11;27.98;... 63.85;27.55;26.43;65.73;25.94]; S = timetable(Date,Stock,Price)
S=11×2 timetable
Date Stock Price
___________ ______ _____
12-Apr-2008 Stock1 60.35
12-Apr-2008 Stock2 27.68
12-Apr-2008 Stock1 64.19
12-Apr-2008 Stock2 25.47
12-Apr-2008 Stock2 28.11
12-Apr-2008 Stock2 27.98
13-Apr-2008 Stock1 63.85
13-Apr-2008 Stock2 27.55
13-Apr-2008 Stock2 26.43
13-Apr-2008 Stock1 65.73
13-Apr-2008 Stock2 25.94
S
には、初日の Stock1
の 2 つの価格と、初日の Stock2
の 4 つの価格が含まれます。
各株の個別の変数と、各日について 1 行を含む timetable を作成します。Date
(行時間のベクトル) をグループ化変数として使用し、集積関数 @mean
を、各グループの変数 Price
の数値に適用します。
[U,is] = unstack(S,'Price','Stock',... 'AggregationFunction',@mean)
U=2×2 timetable
Date Stock1 Stock2
___________ ______ ______
12-Apr-2008 62.27 27.31
13-Apr-2008 64.79 26.64
is = 2×1
1
7
U
は、日付別にグループ化された株ごとの平均価格を含みます。
is
は、S
の行の各グループに対する最初の値のインデックスを識別します。日付が 2008 年 4 月 13 日のグループの最初の値は、S
の 7 番目の行にあります。
入力引数
S
— 入力テーブル
table | timetable
入力テーブル。table または timetable として指定します。S
はスタック解除するデータ変数 vars
と、指標変数 ivar
を含まなければなりません。S
の残りの変数は、グループ化変数または定数変数のいずれかとして扱うことができます。
vars
— スタック解除する S
の変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
スタック解除する S
の変数。正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルとして指定します。
ivar
— S
の指標変数
正の整数 | 文字ベクトル | string スカラー
S
の指標変数。正の整数、文字ベクトル、または string スカラーとして指定します。ivar
で指定された変数の値により、vars
で指定された変数から取得された要素が U
のどの変数に格納されるかが決まります。
ivar
で指定される変数は、数値ベクトル、logical ベクトル、文字配列、文字ベクトルの cell 配列、string 配列、または categorical ベクトルになります。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: 'AggregationFunction',@mean
は、vars
の値に集積関数 @mean
を適用します。
GroupingVariables
— 行のグループを定義する S
内のグループ化変数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
行のグループを定義する S
内のグループ化変数。'GroupingVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。S
の行の各グループは、U
の 1 つの行になります。
S
は最初の次元に沿った行ラベルをもつことができます。S
が table の場合は、行名をラベルとしてもつことができます。S
が timetable の場合、行時間をラベルとしてもたなければなりません。unstack
は行ラベルをグループ化変数として扱うことができます。
'GroupingVariables'
を指定しない場合、S
が timetable であれば、unstack
で行時間がグループ化変数として扱われます。'GroupingVariables'
を指定する場合、S
に含まれる行名または行時間は、'GroupingVariables'
の値に含めないとunstack
でグループ化変数として扱われません。
ConstantVariables
— グループ内の変数定数
正の整数 | 正の整数のベクトル | string 配列 | 文字ベクトル | 文字ベクトルの cell 配列 | pattern
スカラー | logical ベクトル
グループ内の変数定数。'ConstantVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。
U
のこれらの変数の値は、S
の各グループの最初の行から取得されます。
'ConstantVariables'
の値を指定する場合、S
の行名または行時間を含めることができます。
NewDataVariableNames
— U
の新しいデータ変数の名前
文字ベクトルの cell 配列 | string 配列
U
の新しいデータ変数の名前。'NewDataVariableNames'
と、文字ベクトルの cell 配列または string 配列で構成されるコンマ区切りのペアとして指定します。
'NewDataVariableNames'
を指定しない場合、unstack
は U
の新しいデータ変数の名前を ivar
で指定された指標変数の値に基づいて作成します。
AggregationFunction
— vars
の値から単一値への集積関数
@sum
(数値データ) または @unique
(非数値データ) (既定値) | 関数ハンドル
vars
の値から単一値への集積関数。'AggregationFunction'
と関数ハンドルで構成されるコンマ区切りのペアとして指定します。unstack
はこの関数を、ivar
に同じ値をもつ同じグループからの行に適用します。この関数はデータ値を単一値に集積しなければなりません。
'AggregationFunction'
の値を指定しない場合、unstack
は、データ型に応じて異なる既定の集積関数を使用します。
数値データの場合、既定の集積関数は
sum
です。非数値データの場合、既定の集積関数は
unique
です。
スタック解除後に ivar
に指定された指標値に対応するデータ値がないために、集積対象のデータ値がない場合、unstack
は、スタック解除された出力 table の空の要素を埋めなければなりません。その場合、unstack
は、空の配列を入力として集積関数を呼び出します。unstack
が埋める値は、入力が空の配列であるときに集積関数が返す値に依存します。
集積対象のデータがない場合に集積関数が返す値 | スタック解除 table の空の要素に挿入される値 |
---|---|
集積関数でエラーが発生 |
|
空の配列 | 適切なデータ型の埋め込み値 ( 例: 集積関数が |
スカラー値 | 集積関数から返されるスカラー値。 例: 集積関数が |
ベクトル、行列、または多次元配列 |
|
VariableNamingRule
— U
内の変数の命名規則
'modify'
(既定値) | 'preserve'
U
内の変数の命名規則。'VariableNamingRule'
と、値 'modify'
または値 'preserve'
で構成されるコンマ区切りのペアとして指定します。
'VariableNamingRule'
の値は、出力 table または timetable 内の変数について、次の命名規則を指定します。
| 規則 |
---|---|
| 出力内の対応する変数名が有効な MATLAB® 識別子となるように、入力 table または timetable から取得された名前を変更します。 |
| 入力 table または timetable から取得された元の名前を保持します。出力内の対応する変数名には、空白や非 ASCII 文字を含む任意の Unicode® 文字を使用できます。 メモ: 場合によっては、
|
出力引数
is
— S
のインデックス
列ベクトル
S
のインデックス。列ベクトルとして返されます。U
の各行に対して、インデックス ベクトル is
は S
の対応する行グループ内の最初の値のインデックスを識別します。
詳細
グループ化変数
グループ化変数は、データのグループ化や分類のために使用するユーティリティ変数です。グループ化変数はグループ別にデータを要約または可視化する場合に便利です。1 つ以上のグループ化変数を指定することで、テーブルでグループを定義できます。
グループ化変数は次の任意のデータ型です。
categorical ベクトル
文字ベクトルの cell 配列
string 配列
文字配列
数値ベクトル (通常は正の整数を含みます)
logical ベクトル
グループ化変数の値が同じである行は同じグループに属します。複数のグループ化変数を使用する場合、グループ化変数の値と同じ組み合わせをもつ行は同じグループに属します。
ヒント
S
の複数のデータ変数を指定できます。各変数はU
のスタック解除された一連のデータ変数になります。正の整数のベクトル、複数の変数名を格納する cell 配列か string 配列、または logical ベクトルを使用して、vars
を指定します。入力引数ivar
によって指定された 1 つの指標変数が、vars
によって指定されたすべてのデータ変数に適用されます。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
名前と値の引数
'NewDataVariableNames'
を指定しなければなりません。値は定数でなければなりません。入力引数の
vars
とivars
(データ変数と指標変数) は定数でなければなりません。グループ化変数および定数変数を指定する場合は、定数でなければなりません。
集積関数を指定する場合は、定数でなければなりません。
入力が規則的な行時間をもつ timetable の場合に行時間を含まないグループ化変数を指定すると、出力 timetable に不規則な行時間が含まれることがあります。出力の行時間の間隔が同じように見えても、出力 timetable では行時間のベクトルが不規則であると見なされます。
入力 table または timetable の変数が文字ベクトルの cell 配列である場合、
unstack
は、生成コードにおいて、対応する出力変数の空の cell を 1 行 0 列の文字配列で埋めます。MATLAB では、unstack
はそのようなギャップを 0 行 0 列の文字配列で埋めます。関数
unstack
は、入力 table または timetable の変数が同種 cell 配列に変換できない異種混合 cell 配列である場合、コード生成をサポートしません。入力の変数が同種 cell 配列である (つまり 1 つに変換できる) 場合は、名前と値の引数
'AggregationFunction'
を指定しなければなりません。'AggregationFunction'
の既定値は'unique'
です。ただし、関数unique
は cell 配列をサポートしません。
入力引数
vars
と、名前と値の引数'GroupingVariables'
および'ConstantVariables'
の値は、パターン式をサポートしません。
バージョン履歴
R2013b で導入R2020a: 非数値データの既定の集積関数
R2020a では、名前と値のペアの引数 'AggregationFunction'
を指定しない場合、非数値データの既定の集積関数は関数 unique
です。以前のリリースでは、非数値データの既定の集積関数がなかったため、unstack
でエラーが発生していました。
R2020a: 集積関数に集積対象のデータがない場合の動作の変更
R2020a では、集積関数に集積対象のデータがない場合の動作が変更されています。この状況は、スタック解除後に指標変数内の値に対応するデータ値がない場合に発生する可能性があります。そのような場合、unstack
は実質的に、空の配列上で集積関数を呼び出します。
集積対象のデータがない場合に集積関数が返す値 | R2020a での動作 | 以前のリリースでの動作 |
---|---|---|
データ変数は数値で、集積関数でエラーが発生する。 |
|
|
データ変数は非数値で、集積関数が空の配列を返す。 |
|
|
データ変数は数値で、集積関数はスカラー値を返す (たとえば、 |
|
|
データ変数は数値で、集積関数はベクトル、行列、または多次元配列を返す。 |
|
|
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)