stack
将来自输入表或时间表的数据堆叠到输出表或时间表的一个变量中
说明
将输入表或时间表 S
= stack(U
,vars
)U
转换为堆叠的表或时间表 S
。该函数将 U
中多个变量的值堆叠到 S
的一个变量中。输入参量 vars
通过变量的名称或变量在 U
中的位置,指定要堆叠 U
中的哪些变量。
如果 U
有 n
个行,并且 vars
在 U
中指定 m
个变量,则 S
有 m*n
个行。stack
函数对 U
中指定变量的值进行交错,以在 S
中创建一个变量。例如,如果 U
有 10 行,并且您堆叠来自 U
的三个变量,则 S
有 30 行。通常,S
包含的变量数比 U
少,但包含的行数比其多。
输出表或时间表 S
包含一个新的 categorical
变量,以指示 S
的每一行中的堆叠数据来自 U
中的哪个变量。stack
函数从 U
中未堆叠的变量复制数据。
如果
U
是表,则不能堆叠行名称。如果
U
是时间表,则不能堆叠行时间。
将由 S
= stack(U
,{vars
1,...,vars
N}){vars1,...,varsN}
指定的变量中的值堆叠到 S
中的 N
个变量中。有关详细信息,请参阅在输出中创建多个堆叠变量。
转换表 S
= stack(___,Name,Value
)U
,并通过一个或多个名称值参量指定其他选项。
例如,您可以为 S
中的新堆叠变量指定变量名称。
示例
将三个变量堆叠成一个
从三个单独的测试创建一个包含测试分数的表。此表为分叠格式。
Test1 = [93;57;87;89]; Test2 = [89;77;92;86]; Test3 = [95;62;89;91]; U = table(Test1,Test2,Test3)
U=4×3 table
Test1 Test2 Test3
_____ _____ _____
93 89 95
57 77 62
87 92 89
89 86 91
该表包含四行和三个变量。
将测试分数堆叠到一个变量中。
S = stack(U,1:3)
S=12×2 table
Test1_Test2_Test3_Indicator Test1_Test2_Test3
___________________________ _________________
Test1 93
Test2 89
Test3 95
Test1 57
Test2 77
Test3 62
Test1 87
Test2 92
Test3 89
Test1 89
Test2 86
Test3 91
S
包含十二行和两个变量。S
为堆叠格式。
分类变量 Test1_Test2_Test3_Indicator
标识哪个测试对应于堆叠数据变量 Test1_Test2_Test3
中的分数。
堆叠变量并指定变量名称
创建一个时间表,指示三个城镇的五个不同暴风雪天气带来的降雪量。将暴风雪日期指定为 datetime
值,并将其用作时间表 U
的行时间。将由暴风雪编号组成的数组 Storm
指定为分类数组,因为在此时间表中有一组固定的暴风雪编号。
Storm = categorical([1;2;3;4;5]); Date = datetime({'2011-12-25';'2012-01-02';'2012-01-23';'2012-02-07';'2012-02-15'}); Natick = [20;5;13;0;17]; Boston = [18;9;21;5;12]; Worcester = [26;10;16;3;15]; U = timetable(Date,Storm,Natick,Boston,Worcester)
U=5×4 timetable
Date Storm Natick Boston Worcester
___________ _____ ______ ______ _________
25-Dec-2011 1 20 18 26
02-Jan-2012 2 5 9 10
23-Jan-2012 3 13 21 16
07-Feb-2012 4 0 5 3
15-Feb-2012 5 17 12 15
变量 Storm
和 Date
包含每个位置的常量数据。
将变量 Natick
、Boston
和 Worcester
堆叠到一个变量中。命名包含堆叠数据的变量 Snowfall
,并命名新指示变量 Town
。
S = stack(U,{'Natick','Boston','Worcester'},... 'NewDataVariableName','Snowfall',... 'IndexVariableName','Town')
S=15×3 timetable
Date Storm Town Snowfall
___________ _____ _________ ________
25-Dec-2011 1 Natick 20
25-Dec-2011 1 Boston 18
25-Dec-2011 1 Worcester 26
02-Jan-2012 2 Natick 5
02-Jan-2012 2 Boston 9
02-Jan-2012 2 Worcester 10
23-Jan-2012 3 Natick 13
23-Jan-2012 3 Boston 21
23-Jan-2012 3 Worcester 16
07-Feb-2012 4 Natick 0
07-Feb-2012 4 Boston 5
07-Feb-2012 4 Worcester 3
15-Feb-2012 5 Natick 17
15-Feb-2012 5 Boston 12
15-Feb-2012 5 Worcester 15
S
包含每场暴风雪的三行数据,stack
相应地复制常变量 Storm
和 Date
中的数据。
分类变量 Town
标识 U
中的哪个变量包含对应的 Snowfall
数据。
堆叠变量并输出索引向量
创建一个时间表,其中包含沿美国东海岸的每月流感发病率估计值。为东北、中大西洋和南大西洋创建另一个变量。数据源:Google Flu Trends 项目(现已停止)。使用一个 datetime
数组作为时间表的行时间。
Month = datetime(2005,10,1,'Format','MMMM yyyy') + calmonths(0:5); Month = Month'; NE = [1.1902; 1.3610; 1.5003; 1.7772; 2.1350; 2.2345]; MidAtl = [1.1865; 1.4120; 1.6043; 1.8830; 2.1227; 1.9920]; SAtl = [1.2730; 1.5820; 1.8625; 1.9540; 2.4803; 2.0203]; fluU = timetable(Month,NE,MidAtl,SAtl)
fluU=6×3 timetable
Month NE MidAtl SAtl
_____________ ______ ______ ______
October 2005 1.1902 1.1865 1.273
November 2005 1.361 1.412 1.582
December 2005 1.5003 1.6043 1.8625
January 2006 1.7772 1.883 1.954
February 2006 2.135 2.1227 2.4803
March 2006 2.2345 1.992 2.0203
变量 Month
包含跨行的常量数据。
将变量 NE
、MidAtl
和 SAtl
堆叠到一个名为 FluRate
的变量中。命名新指示变量 Region
并输出索引向量 ifluU
,以指示分叠输入表 fluU
和堆叠输出表 fluS
中的各行之间的对应关系。
[fluS,ifluU] = stack(fluU,1:3,... 'NewDataVariableName','FluRate',... 'IndexVariableName','Region')
fluS=18×2 timetable
Month Region FluRate
_____________ ______ _______
October 2005 NE 1.1902
October 2005 MidAtl 1.1865
October 2005 SAtl 1.273
November 2005 NE 1.361
November 2005 MidAtl 1.412
November 2005 SAtl 1.582
December 2005 NE 1.5003
December 2005 MidAtl 1.6043
December 2005 SAtl 1.8625
January 2006 NE 1.7772
January 2006 MidAtl 1.883
January 2006 SAtl 1.954
February 2006 NE 2.135
February 2006 MidAtl 2.1227
February 2006 SAtl 2.4803
March 2006 NE 2.2345
⋮
ifluU = 18×1
1
1
1
2
2
2
3
3
3
4
⋮
ifluU(5)
为 2
。输出表 fluS
的第五行包含输入表 fluU
的第二行中的数据。
输入参数
U
— 输入表
表 | 时间表
输入表,指定为表或时间表。
vars
— U
中要堆叠的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
U
中要堆叠的变量,指定为正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组或 pattern
标量。
示例: S = stack(U,1:4)
将 U
的前四个变量堆叠到 S
中的一个变量中。
示例: S = stack(U,{'Var1',Var3','Var5'})
堆叠 U
的名为 Var1
、Var3
和 Var5
的变量。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 'NewDataVariableName','StackedData'
命名新数据变量 StackedData
。
ConstantVariables
— 要包括在输出中的 vars
之外的变量
正整数 | 正整数向量 | 字符串数组 | 字符向量 | 字符向量元胞数组 | pattern
标量 | 逻辑向量
要包括在输出中的 vars
之外的变量,指定为逗号分隔的对组,包含 'ConstantVariables'
和正整数、正整数向量、字符串数组、字符向量、字符向量元胞数组、pattern
标量或逻辑向量。stack
为行中的每个堆叠条目复制常变量中的数据。
默认值是 U
中未由 vars
指定的所有变量。您可以指定 'ConstantVariables'
名称-值对组参量,以便从输出表 S
中排除 vars
或 'ConstantVariables'
未指定的变量。
U
可以在其第一个维度包含行标签。如果 U
是表,则它可以将行名称作为标签。如果 U
是时间表,则它必须将行时间作为标签。
当您指定
'ConstantVariables'
的值时,可以包括行名称或行时间。stack
会复制行名称或行时间,即使您没有在'ConstantVariables'
中包含它们也是如此。
NewDataVariableName
— S
中新数据变量的名称
字符向量 | 字符串数组 | 字符向量元胞数组
S
中新数据变量的名称,以逗号分隔的对组形式指定,该对组由 'NewDataVariableName'
和一个字符向量、字符串数组或字符向量元胞数组组成。默认值是 U
中堆叠的变量名称的串联。
IndexVariableName
— S
中新指示变量的名称
字符向量 | 字符串标量
S
中新指示变量的名称,指定为逗号分隔的对组,其中包含 'IndexVariableName'
和一个字符向量或字符串标量。默认值是基于 NewDataVariableName
的名称。
输出参量
iu
— U
的索引
列向量
U
的索引,以列向量形式返回。索引向量 iu
标识输入表 U
中包含对应数据的行。stack
使用 U(iu(j),vars)
在输出表 S
中创建第 j
行。
算法
在输出中创建多个堆叠变量
可以将输入中的值堆叠到输出中的多个变量中。要在
S
中创建多个堆叠变量,请使用元胞数组从U
中指定多组变量。可以使用元胞数组包含vars
的多个值,使用字符向量元胞数组或字符串数组包含'NewDataVariableName'
名称-值对组参量的多个值。所有组都必须包含相同数量的变量。例如,如果
U
包含四个变量,则可以使用以下语法在S
中创建两个堆叠变量,而不是只创建一个。vars = {[1 2],[3 4]}; S = stack(U,vars)
因此,
S
的一个堆叠变量的值来自U
的第一个和第二个变量,另一个堆叠变量的值来自U
的第三个和第四个变量。要在
S
中指定新变量名称,请使用'NewDataVariableName'
。您指定的名称的数量必须等于vars
中指定的组的数量。vars = {[1 2],[3 4]}; S = stack(U,vars,'NewDataVariableName',{'Vars1And2','Vars3And4'})
当您将
vars
指定为字符向量元胞数组时,S
将包含一个堆叠变量。要在使用变量名称的同时指定多个堆叠变量,请使用由字符向量元胞数组组成的元胞数组,或由字符串数组速成的元胞数组。例如,当
U
是包含名为Var1
、Var2
、Var3
和Var4
的变量的表时,以下语法会在S
中创建一个堆叠变量。S = stack(U,{'Var1','Var2','Var3','Var4'})
以下语法在
S
中创建两个堆叠变量。S = stack(U,{{'Var1','Var2'} {'Var3','Var4'}})
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
第二个输入参量
vars
必须为常量。'ConstantVariables'
、'NewDataVariableName'
和'IndexVariableName'
名称-值参量的值必须为常量。vars
输入参量和'ConstantVariables'
名称-值参量的值不支持模式表达式。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2013b 中推出
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)