unstack
将来自输入表或时间表的数据分列到输出表或时间表的多个变量中
说明
将来自输入表或时间表的指定变量的数据分列到输出表或时间表的多个变量中。输入参量 U
= unstack(S
,vars
,ivar
)vars
指定要分列的变量。通常,输出包含的变量比输入的变量多,但包含的行数更少。
输入参量 ivar
指定指示变量。在输入的每一行中,指示变量的值指示输出的对应变量。unstack
函数使用匹配指示值聚合数据。然后在输出的变量之间分发聚合值。
默认聚合方法取决于数据类型。例如,默认情况下,unstack
通过对数值数据求和来聚合数值数据。
输入可能包含未指定为 vars
或 ivar
的其他变量。unstack
函数对其他变量的处理方式会因表和时间表而不同。
如果
S
是表,则unstack
将其余的变量视为分组变量。分组变量中各个唯一的值组合标识了S
中将要分列到U
某一行的一组行。如果
S
是时间表,则unstack
将丢弃其余的变量。但是,unstack
会将行时间向量视为分组变量。
您不能对表的行名称或时间表的行时间进行分列,也不能将行名称或行时间指定为指示变量。
示例
从 snowfall.mat
样本文件中载入一个表,该表指示各场暴风雪给各个城镇带来的降雪量。该表针对每场暴风雪包含三个降雪量条目,每个城镇一个。它采用堆叠格式,Storm
和 Town
具有 categorical
数据类型。具有 categorical
数据类型的表变量是有用的指示变量和分组变量。
load snowfall.mat
S
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
将变量 Snowfall
分成三个变量,每个变量对应变量 Town
中指定的一个城镇。输出表为分列格式。U
中的各行包含来自 S
中的行(这些行在分组变量 Storm
中具有相同的值)的数据。Storm
中唯一值的顺序决定了 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
对于某些类型的分析和显示,分列格式可能更方便。例如,现在可以更直接地绘制每个城镇的降雪量。要绘制每个城镇的降雪量的散点图,请使用 scatter
函数。
scatter(U,"Storm",["Boston" "Natick" "Worcester"])
对数据进行分列运算,并向同一个组中具有相同指示变量值的多行应用聚合函数。还返回索引向量作为第二个参量。使用该参量对原始堆叠输入表进行索引。
从 stockPricesSmall.mat
样本文件载入一个时间表,该时间表包含两支股票两天内的价格数据。Stock
变量的数据类型为 categorical
,因为该时间表具有一组固定的股票名称。
load stockPricesSmall.mat
S
S=11×2 timetable
Date Stock Price
___________ ______ _____
12-Apr-2025 Stock1 60.35
12-Apr-2025 Stock2 27.68
12-Apr-2025 Stock1 64.19
12-Apr-2025 Stock2 25.47
12-Apr-2025 Stock2 28.11
12-Apr-2025 Stock2 27.98
15-Apr-2025 Stock1 63.85
15-Apr-2025 Stock2 27.55
15-Apr-2025 Stock2 26.43
15-Apr-2025 Stock1 65.73
15-Apr-2025 Stock2 25.94
S
包含 Stock1
第一天的两个价格和 Stock2
第一天的四个价格。
创建一个时间表,其中包含代表每支股票的不同变量,每一天占一行。将 Date
(行时间向量)用作分组变量,并指定 mean
作为聚合函数。此操作分列 Price
变量中的价格,按日期对价格进行分组,并计算每支股票每天的均价。
[U,is] = unstack(S,"Price","Stock", ... AggregationFunction=@mean)
U=2×2 timetable
Date Stock1 Stock2
___________ ______ ______
12-Apr-2025 62.27 27.31
15-Apr-2025 64.79 26.64
is = 2×1
1
7
第二个输出 is
标识 S
中每个行组的第一个值的索引。例如,日期为 2025 年 4 月 15 日的组的第一个值位于 S
的第七行。
S(is(2),:)
ans=1×2 timetable
Date Stock Price
___________ ______ _____
15-Apr-2025 Stock1 63.85
输入参数
输入表,指定为表或时间表。输入必须包含要分列的数据变量和一个指示变量。其余变量可以被视为分组变量或常变量。
要分列的输入变量,指定为字符串数组、字符向量、字符向量元胞数组、pattern
标量、正整数、正整数数组或逻辑向量。
示例: U = unstack(S,"Var1","Var2")
使用 Var2
作为指示变量分列 U
的变量 Var1
。
示例: U = unstack(S,["Var1" "Var3" "Var5"],"Var2")
将变量 Var1
、Var3
和 Var5
的值分列为多个分列输出变量。输出变量的数目由 Var2
中的唯一值数目确定。
示例: U = unstack(S,1:4,5)
使用第五个值作为指示变量将 U
的前四个变量分列为 S
中的多个变量。
指示变量,指定为字符串标量、字符向量或正整数。ivar
中的值指示输出的哪些变量接受来自输入的分列数据。
由 ivar
指定的变量可以是数值向量、逻辑向量、字符数组、字符向量元胞数组、字符串数组或分类向量。
名称-值参数
以 Name1=Value1,...,NameN=ValueN
的形式指定可选参量对组,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但对参量对组的顺序没有要求。
示例: AggregationFunction=@mean
对 vars
中的值应用聚合函数 mean
。
定义输入的行组的分组变量,指定为字符串数组、字符向量、字符向量元胞数组、pattern
标量、正整数、正整数数组或逻辑向量。输入中的每个行组都变成输出中的一行。
如果分组变量有缺失值,则 unstack
将排除输入表的对应行。它对数据进行分组,并对不包含来自这些行的数据的结果进行分列。缺失值可以通过任意数据类型(整数和逻辑数据类型除外)来实现。常用缺失值包括:
数值数组和
duration
数组中的NaN
datetime
数组中的NaT
字符串数组中的缺失字符串
分类数组中未定义的值
要包含其中的分组变量有缺失值的行,请考虑改用 groupsummary
函数。
S
可以在其第一个维度包含行标签。如果 S
是表,则它可以将行名称作为标签。如果 S
是时间表,则它必须将行时间作为标签。unstack
可以将行标签视为分组变量。
如果您不指定
GroupingVariables
,并且S
是一个时间表,则unstack
会将行时间视为分组变量。如果您指定了
GroupingVariables
,并且S
具有行名称或行时间,则unstack
不会将行名称或行时间视为分组变量,除非您将它们包含在GroupingVariables
中。
组内的常变量,指定为字符串数组、字符向量、字符向量元胞数组、pattern
标量、正整数、正整数数组或逻辑向量。
输出中这些变量的值提取自输入中各组的第一行。
当您指定 ConstantVariables 时,可以包括输入的行名称或行时间。
如果您不指定 ConstantVariables
,则 unstack
不会将任何变量视为常变量。
输出中新数据变量的名称,指定为字符串数组或字符向量元胞数组。
如果您不指定 NewDataVariableNames
,则 unstack
将根据指示变量 ivar
中值的字符串表示来为输出中的新数据变量创建名称。
要应用于数据变量的聚合函数,指定为函数句柄。unstack
将此函数应用于同一个组中在 ivar
中具有相同值的行。此函数必须将数据值聚合为一个输出值。
如果您没有指定 AggregationFunction
,则 unstack
会根据数据类型使用不同的默认聚合函数。
对于数值数据,默认聚合函数为
sum
。对于非数值数据,默认聚合函数为
unique
。
如果没有要聚合的数据值,则在分列后将没有与 ivar
的给定指示符值相对应的数据值,unstack
必须在分列后的输出表中填充空元素。在这种情况下,unstack
或者填充缺失值,或者调用用户提供的聚合函数并以空数组作为输入。在后一种情况下,unstack
填充的值取决于聚合函数在没有数据要聚合时返回的内容。
给定指示符值没有数据时的结果 | 填充插入分列的表的空元素中的值 |
---|---|
聚合函数是默认函数之一。 | 适当数据类型的缺失值,例如 |
聚合函数是用户提供的函数。当给定一个空数组作为输入时,它返回空数组。 | 适当数据类型的缺失值,例如 示例:如果聚合函数是 |
聚合函数是用户提供的函数。当给定一个空数组作为输入时,它返回标量。 | 从聚合函数返回的标量。 示例:如果聚合函数是 |
聚合函数是用户提供的函数。它返回向量、矩阵或多维数组。 |
|
聚合函数引发错误。 |
|
输出的变量命名规则,指定为 "modify"
或 "preserve"
。
VariableNamingRule
参量指定在输出中命名变量的以下规则。
| 规则 |
---|---|
| 修改取自输入表或时间表的名称,使输出中对应的变量名称也是有效的 MATLAB® 标识符。 |
| 保留取自输入表或时间表的原始名称。输出中对应的变量名称可以包含任何 Unicode® 字符,包括空格和非 ASCII 字符。 注意:在某些情况下,
|
输出参量
详细信息
分组变量是用于对数据进行分组或分类的实用变量。分组变量对于按组对数据进行汇总或可视化十分有用。您可以通过指定一个或多个分组变量来定义表中的组。
分组变量可以是以下任意一种类型:
分类向量
字符串数组
字符向量元胞数组
数值向量,通常包含正整数
逻辑向量
datetime
或duration
向量
分组变量具有相同值的行属于同一组。
如果分组变量有缺失值,则 unstack
将排除输入表的对应行。它对数据进行分组,并对不包含来自这些行的数据的结果进行分列。缺失值是诸如 NaN
、NaT
、缺失字符串和未定义的分类值之类的值。
提示
您可以指定输入的多个数据变量,每个变量都会变成输出中的一组分列数据变量。可使用正整数向量、包含多个变量名称的元胞数组或字符串数组或者逻辑向量来指定
vars
。输入参量ivar
指定的一个指示变量适用于vars
指定的所有数据变量。
扩展功能
用法说明和限制:
必须指定
NewDataVariableNames
名称-值参量。其值必须为常量。vars
和ivars
输入参量(数据变量和指示变量)必须为常量。如果指定分组变量和常变量,则它们必须为常量。
如果指定聚合函数,则它必须为常量。
如果输入是具有规则行时间的时间表,并且您指定不包括行时间的分组变量,则输出时间表可能具有不规则行时间。尽管输出行时间之间的间隔可能看起来相同,但输出时间表认为行时间向量是不规则的。
如果输入表或时间表的一个变量是字符向量元胞数组,则
unstack
会在生成的代码中用 1×0 字符数组填充对应输出变量中的空单元格。在 MATLAB 中,unstack
用 0×0 字符数组来填充这些空缺。当输入表或时间表中有一个变量是异构元胞数组且无法转换为同构元胞数组时,
unstack
函数不支持生成代码。如果输入有一个变量是同构元胞数组或可以转换为同构元胞数组,则必须指定
AggregationFunction
名称-值参量。AggregationFunction
的默认值是"unique"
。但是,unique
函数不支持元胞数组。
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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 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)