stack
将来自输入表或时间表的数据堆叠到输出表或时间表的一个变量中
说明
将来自输入表或时间表的多个变量的数据堆叠到输出表或时间表的一个变量中。输入参量 S = stack(U,vars)vars 指定要堆叠的变量。该函数将输入的变量中的值交错堆叠到输出。它还会向输出添加一个指示变量。在输出的每一行中,指示变量的值指示输入的哪个变量提供了这些数据。
如果输入有 N 行,并且 vars 指定了 M 个变量,则输出有 M*N 行。通常,输出包含的变量比输入的变量少,但包含的行数更多。
输出的指示变量的数据类型为 categorical。对堆叠数据调用 groupsummary 或 varfun 等函数时,您可以使用该指示变量作为分组变量。
如果 vars 未在输入表或时间表中指定所有变量,则其余变量的值不会与 vars 指定的变量的值堆叠。stack 会将未堆叠的变量复制到它们在输出中对应的各自的变量中。
如果输入是包含行名称的表,则不能在输出中堆叠表自身的行名称。
如果输入是时间表,则不能在输出中堆叠时间表自身的行名称。
用于在上述语法中的输入参量之外另使用一个或多个名称-值参量指定选项。例如,您可以为输出中的新堆叠变量指定您自己的名称。S = stack(___,Name=Value)
示例
创建一个包含来自三个不同气象站温度测量值的表。该表采用分列格式,因为每个表变量都对应其中一个气象站。
ST1 = [93;57;87;89]; ST2 = [89;77;92;86]; ST3 = [95;62;89;91]; U = table(ST1,ST2,ST3)
U=4×3 table
ST1 ST2 ST3
___ ___ ___
93 89 95
57 77 62
87 92 89
89 86 91
要将测量值堆叠到输出表中的一个变量,请使用 stack 函数。在每一行中,指示变量 ST1_ST2_ST3_Indicator 指示对应的测量值来自那个气象站。
S = stack(U,1:3)
S=12×2 table
ST1_ST2_ST3_Indicator ST1_ST2_ST3
_____________________ ___________
ST1 93
ST2 89
ST3 95
ST1 57
ST2 77
ST3 62
ST1 87
ST2 92
ST3 89
ST1 89
ST2 86
ST3 91
堆叠格式的一个用途是,你可以使用指示变量对行进行分组,并对这些分组执行计算。例如,要计算每个气象站的平均温度和温度标准差,可以使用 groupsummary 函数。使用 groupsummary,您可以在一次函数调用中计算多项统计数据并在一个表中返回结果。
weatherStats = groupsummary(S,"ST1_ST2_ST3_Indicator",["mean" "std"])
weatherStats=3×4 table
ST1_ST2_ST3_Indicator GroupCount mean_ST1_ST2_ST3 std_ST1_ST2_ST3
_____________________ __________ ________________ _______________
ST1 4 81.5 16.523
ST2 4 86 6.4807
ST3 4 84.25 15.042
从样本文件中加载一个表,其中列出五次不同暴风雪天气给三个城镇带来的降雪量。由于该表记录了本季节固定的一组风暴编号,因此 Storm 变量在一个分类数组中包含了风暴编号。
load snowfallByTown.mat
UU=5×5 table
Date Storm Natick Boston Worcester
___________ _____ ______ ______ _________
25-Dec-2024 1 20 18 26
02-Jan-2025 2 5 9 10
23-Jan-2025 3 13 21 16
07-Feb-2025 4 0 5 3
15-Feb-2025 5 17 12 15
要堆叠有关降雪量的数据,请使用 stack 函数。将变量 Natick、Boston 和 Worcester 中的值堆叠到单个变量中。将包含堆叠数据值的变量命名为 Snowfall。将新指示变量命名为 Town。
输出表包含每场暴风雪的三行数据。stack 函数将 Date 和 Storm 变量视为常变量,因为没有将它们指定为数据或指示变量。stack 不会堆叠来自 Date 和 Storm 的值,而是将它们复制到输出表中需要的行中。例如,Storm 的值在输出的前三行为 1,因为这些行都有关于同一场暴风雪的数据。同样,前三行也有相同的日期。
S = stack(U,["Natick" "Boston" "Worcester"], ... NewDataVariableName="Snowfall", ... IndexVariableName="Town")
S=15×4 table
Date Storm Town Snowfall
___________ _____ _________ ________
25-Dec-2024 1 Natick 20
25-Dec-2024 1 Boston 18
25-Dec-2024 1 Worcester 26
02-Jan-2025 2 Natick 5
02-Jan-2025 2 Boston 9
02-Jan-2025 2 Worcester 10
23-Jan-2025 3 Natick 13
23-Jan-2025 3 Boston 21
23-Jan-2025 3 Worcester 16
07-Feb-2025 4 Natick 0
07-Feb-2025 4 Boston 5
07-Feb-2025 4 Worcester 3
15-Feb-2025 5 Natick 17
15-Feb-2025 5 Boston 12
15-Feb-2025 5 Worcester 15
要仅将 Storm 包含为常变量,请指定 ConstantVariables 名称-值参量。
S = stack(U,["Natick" "Boston" "Worcester"], ... NewDataVariableName="Snowfall", ... IndexVariableName="Town", ... ConstantVariables="Storm")
S=15×3 table
Storm Town Snowfall
_____ _________ ________
1 Natick 20
1 Boston 18
1 Worcester 26
2 Natick 5
2 Boston 9
2 Worcester 10
3 Natick 13
3 Boston 21
3 Worcester 16
4 Natick 0
4 Boston 5
4 Worcester 3
5 Natick 17
5 Boston 12
5 Worcester 15
从样本文件中加载表格,该表格列出了经历电力中断的电力公司客户的数量。样本数据按月和美国的地区进行汇总。将该表转换为时间表。月份成为时间表的行时间。
load customersByRegion.mat
customersByRegion = table2timetable(customersByRegion)customersByRegion=6×3 timetable
Month NorthEast MidWest SouthEast
_____________ _________ _______ _________
October-2023 3492 565 1027
November-2023 2944 1293 834
December-2023 2559 936 1412
January-2024 12045 50117 0
February-2024 4931 1089 137
March-2024 3018 942 870
将变量 NorthEast、MidWest 和 SouthEast 堆叠到一个名为 CustomersOutage 的变量中。将新指示变量命名为 Region。还返回一个名为 indexCustomersOutage 的索引向量作为第二个输出。它指示未堆叠输入和堆叠输出中的行之间的对应关系。(出于堆叠目的,stack 将 Month(包含行时间)视为一个常变量。该函数会复制输出时间表中的行时间。)
[customersOutage,indexCustomersOutage] = stack(customersByRegion,1:3, ... NewDataVariableName="CustomersOutage", ... IndexVariableName="Region")
customersOutage=18×2 timetable
Month Region CustomersOutage
_____________ _________ _______________
October-2023 NorthEast 3492
October-2023 MidWest 565
October-2023 SouthEast 1027
November-2023 NorthEast 2944
November-2023 MidWest 1293
November-2023 SouthEast 834
December-2023 NorthEast 2559
December-2023 MidWest 936
December-2023 SouthEast 1412
January-2024 NorthEast 12045
January-2024 MidWest 50117
January-2024 SouthEast 0
February-2024 NorthEast 4931
February-2024 MidWest 1089
February-2024 SouthEast 137
March-2024 NorthEast 3018
⋮
indexCustomersOutage = 18×1
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
⋮
您可以使用索引向量获取堆叠输出中包含来自未堆叠输入特定行的数据的所有行。例如,对 customersOutage 进行索引,以获取包含 customersByRegion 的第一行的数据的所有输出行。
idx = (indexCustomersOutage == 1); dataFromFirstRowCustomersByRegion = customersOutage(idx,:)
dataFromFirstRowCustomersByRegion=3×2 timetable
Month Region CustomersOutage
____________ _________ _______________
October-2023 NorthEast 3492
October-2023 MidWest 565
October-2023 SouthEast 1027
可以将输入表或时间表中的值堆叠到输出表或时间表的多个变量中。要在输出中创建多个堆叠变量,请使用元胞数组指定来自输入的多组变量。
例如,创建一个包含四个变量的表,其中的变量包含两组温度测量值。
D1 = [93;57;87;89]; D2 = [89;77;92;86]; T1 = [95;62;89;91]; T2 = [88;69;91;83]; U = table(D1,D2,T1,T2)
U=4×4 table
D1 D2 T1 T2
__ __ __ __
93 89 95 88
57 77 62 69
87 92 89 91
89 86 91 83
假设 D1 和 D2 使用不同的仪器对同一个位置进行采样,同样,T1 和 T2 对第二个位置进行采样。要将同一位置的测量值放在一起,请使用 stack 和一个指定两组输入表变量的元胞数组。stack 函数将 D1 和 D2 中的值交错堆叠到输出表变量 D1_D2,将 T1 和 T2 中的值交错堆叠到 T1_T2。指示变量通过指示每个分组中哪个输入表变量向输出表提供了数值来展示这种交错堆叠。如果指定多组变量,则各组的变量数必须相同。
S = stack(U,{["D1" "D2"],["T1" "T2"]})S=8×3 table
Indicator D1_D2 T1_T2
_________ _____ _____
1 93 95
2 89 88
1 57 62
2 77 69
1 87 89
2 92 91
1 89 91
2 86 83
要指定新的变量名称,请使用 NewDataVariableName 名称-值参量。新名称的数量必须等于您在元胞数组中指定的分组数量。
S = stack(U,{["D1" "D2"],["T1" "T2"]}, ...
NewDataVariableName=["Location 1" "Location 2"])S=8×3 table
Indicator Location 1 Location 2
_________ __________ __________
1 93 95
2 89 88
1 57 62
2 77 69
1 87 89
2 92 91
1 89 91
2 86 83
输入参数
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对参量对组的顺序没有要求。
示例: NewDataVariableName="StackedData" 命名新数据变量 StackedData。
要在输出中复制的 vars 以外的变量,指定为字符串数组、字符向量、字符向量元胞数组、pattern 标量、正整数、正整数数组或逻辑向量。
默认情况下,stack 函数会堆叠由 vars 指定的变量,然后将其余变量的值复制到输出中相应的行上。如果您指定了 ConstantVariables,则 stack 函数会堆叠由 vars 指定的变量,复制 ConstantVariables 指定的变量的值,然后排除其余变量。
输入可以在其第一个维度包含行标签。如果输入是一个表,则它可以将行名称作为标签。如果输入是一个时间表,则它必须将行时间作为标签。
当您指定
ConstantVariables的值时,可以包括行名称或行时间。stack会复制行名称或行时间,即使您没有在ConstantVariables中包含它们也是如此。
输出中新数据变量的名称,指定为字符串数组、字符向量或字符向量元胞数组。默认值是 U 中堆叠的变量名称的串联。
输出中新指示变量的名称,指定为字符串标量或字符向量。默认值是基于 NewDataVariableName 的名称。
输出参量
输入的行索引,以行向量形式返回。索引向量 iu 标识输入中包含复制到输出的对应数据的行。例如,如果 iu(5) 的值是 2,则输出的第五行中的数据来自输入的第二行。
扩展功能
stack 函数完全支持 tall 数组。有关详细信息,请参阅 tall 数组。
用法说明和限制:
第二个输入参量
vars必须为常量。ConstantVariables、NewDataVariableName和IndexVariableName名称-值参量的值必须为常量。vars输入参量和ConstantVariables名称-值参量的值不支持模式表达式。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2013b 中推出
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)