このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
unstack
1 つの変数からデータを取り出して複数変数に入れる
説明
は、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
の 1 つの行にスタック解除されます。S
が timetable の場合、unstack
は残りの変数を破棄します。ただし、unstack
は行時間のベクトルをグループ化変数として扱います。
table の行名または timetable の行時間をスタック解除したり、いずれかを指標変数として指定することはできません。引数 'ConstantVariables'
を使用して、行名または行時間を定数変数として指定できます。
は、1 つ以上の U
= unstack(S
,vars
,ivar
,Name,Value
)Name,Value
のペアの引数で指定された追加オプションを使用して、table または timetable S
を変換します。
たとえば、unstack
が S
の変数を U
の変数に変換する方法を指定できます。
例
さまざまな都市のさまざまな荒天について、降雪量を示すテーブルを作成します。この 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 番目の行にあります。
入力引数
入力 table。table または timetable として指定します。S
はスタック解除するデータ変数 vars
と、指標変数 ivar
を含まなければなりません。S
の残りの変数は、グループ化変数または定数変数のいずれかとして扱うことができます。
スタック解除する S
の変数。正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルとして指定します。
S
の指標変数。正の整数、文字ベクトル、または string スカラーとして指定します。ivar
で指定された変数の値により、vars
で指定された変数から取得された要素が U
のどの変数に格納されるかが決まります。
ivar
で指定される変数は、数値ベクトル、logical ベクトル、文字配列、文字ベクトルの cell 配列、string 配列、または categorical ベクトルになります。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: 'AggregationFunction',@mean
は、vars
の値に集積関数 mean
を適用します。
行のグループを定義する S
内のグループ化変数。'GroupingVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。S
の行の各グループは、U
の 1 つの行になります。
グループ化変数に欠損値がある場合、unstack
は入力 table の対応する行を除外します。データをグループ化し、それらの行からデータのない結果をスタック解除します。欠損値には次のものがあります。
数値配列および
duration
配列内のNaN
datetime
配列内のNaT
string 配列内の欠損 string
categorical 配列内の未定義値
グループ化変数に欠損値がある行を含めるには、代わりに groupsummary
関数を使用することを検討してください。
S
は最初の次元に沿った行ラベルをもつことができます。S
が table の場合は、行名をラベルとしてもつことができます。S
が timetable の場合、行時間をラベルとしてもたなければなりません。unstack
は行ラベルをグループ化変数として扱うことができます。
'GroupingVariables'
を指定しない場合、S
が timetable であれば、unstack
で行時間がグループ化変数として扱われます。'GroupingVariables'
を指定する場合、S
に含まれる行名または行時間は、'GroupingVariables'
の値に含めないとunstack
でグループ化変数として扱われません。
グループ内の変数定数。'ConstantVariables'
と、正の整数、正の整数のベクトル、string 配列、文字ベクトル、文字ベクトルの cell 配列、pattern
スカラー、または logical ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。
U
のこれらの変数の値は、S
の各グループの最初の行から取得されます。
'ConstantVariables'
の値を指定する場合、S
の行名または行時間を含めることができます。
U
の新しいデータ変数の名前。'NewDataVariableNames'
と、文字ベクトルの cell 配列または string 配列で構成されるコンマ区切りのペアとして指定します。
'NewDataVariableNames'
を指定しない場合、unstack
は U
の新しいデータ変数の名前を ivar
で指定された指標変数の値に基づいて作成します。
データ変数に適用する集積関数。'AggregationFunction'
と関数ハンドルで構成されるコンマ区切りのペアとして指定します。unstack
はこの関数を、ivar
に同じ値をもつ同じグループからの行に適用します。この関数はデータ値を 1 つの出力値に集積しなければなりません。
'AggregationFunction'
の値を指定しない場合、unstack
は、データ型に応じて異なる既定の集積関数を使用します。
数値データの場合、既定の集積関数は
sum
です。非数値データの場合、既定の集積関数は
unique
です。
スタック解除後に ivar
に指定された指標値に対応するデータ値がないために、集積対象のデータ値がない場合、unstack
は、スタック解除された出力 table の空の要素を埋めなければなりません。その場合、unstack
は欠損値を埋めるか、空の配列を入力としてユーザー指定の集積関数を呼び出します。後者の場合、unstack
が埋める値は、集積対象のデータがない場合に集積関数が返す値によって決まります。
指定された指標値にデータがない場合の結果 | スタック解除 table の空の要素に挿入される埋め込み値 |
---|---|
集積関数は、既定の関数のいずれかです。 | 適切なデータ型の欠損値 ( |
集積関数は、ユーザー指定の関数です。空の配列が入力として渡されると、空の配列を返します。 | 適切なデータ型の欠損値 ( 例: 集積関数が |
集積関数は、ユーザー指定の関数です。空の配列が入力として渡されると、スカラーを返します。 | 集積関数から返されるスカラー。 例: 集積関数が |
集積関数は、ユーザー指定の関数です。ベクトル、行列、または多次元配列を返します。 |
|
集積関数でエラーが発生します。 |
|
U
内の変数の命名規則。'VariableNamingRule'
と、値 'modify'
または値 'preserve'
で構成されるコンマ区切りのペアとして指定します。
'VariableNamingRule'
の値は、出力 table または timetable 内の変数について、次の命名規則を指定します。
| 規則 |
---|---|
| 出力内の対応する変数名が有効な MATLAB® 識別子となるように、入力 table または timetable から取得された名前を変更します。 |
| 入力 table または timetable から取得された元の名前を保持します。出力内の対応する変数名には、空白や非 ASCII 文字を含む任意の Unicode® 文字を使用できます。 メモ: 場合によっては、
|
出力引数
詳細
グループ化変数は、データのグループ化や分類のために使用するユーティリティ変数です。グループ化変数はグループ別にデータを要約または可視化する場合に便利です。1 つ以上のグループ化変数を指定することで、テーブルでグループを定義できます。
グループ化変数は次の任意のデータ型です。
categorical ベクトル
string 配列
文字ベクトルの cell 配列
数値ベクトル (通常は正の整数を含みます)
logical ベクトル
datetime
またはduration
ベクトル
グループ化変数の値が同じである行は同じグループに属します。
グループ化変数に欠損値がある場合、unstack
は入力 table の対応する行を除外します。データをグループ化し、それらの行からデータのない結果をスタック解除します。欠損値は、NaN
、NaT
、欠損 string、未定義の categorical 値などの値です。
ヒント
S
の複数のデータ変数を指定できます。各変数はU
のスタック解除された一連のデータ変数になります。正の整数のベクトル、複数の変数名を格納する cell 配列か string 配列、または logical ベクトルを使用して、vars
を指定します。入力引数ivar
によって指定された 1 つの指標変数が、vars
によって指定されたすべてのデータ変数に適用されます。
拡張機能
使用上の注意および制限:
名前と値の引数
'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'
の値は、パターン式をサポートしません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
バージョン履歴
R2013b で導入R2020a では、名前と値のペアの引数 'AggregationFunction'
を指定しない場合、非数値データの既定の集積関数は関数 unique
です。以前のリリースでは、非数値データの既定の集積関数がなかったため、unstack
でエラーが発生していました。
R2020a では、集積関数に集積対象のデータがない場合の動作が変更されています。この状況は、スタック解除後に指標変数内の値に対応するデータ値がない場合に発生する可能性があります。そのような場合、unstack
は実質的に、空の配列上で集積関数を呼び出します。
集積対象のデータがない場合に集積関数が返す値 | R2020a での動作 | 以前のリリースでの動作 |
---|---|---|
データ変数は数値で、集積関数でエラーが発生する。 |
|
|
データ変数は非数値で、集積関数が空の配列を返す。 |
|
|
データ変数は数値で、集積関数はスカラー値を返す (たとえば、 |
|
|
データ変数は数値で、集積関数はベクトル、行列、または多次元配列を返す。 |
|
|
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)