Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

stack

将多个变量中的数据堆叠到一个变量中

说明

示例

S = stack(U,vars) 将表或时间表 U 转换为堆叠的等效表或时间表 Sstack 函数将 U 中由指定 vars 的多个变量堆叠成 S 中的一个变量。通常,S 包含的变量数比 U 少,但包含的行数比其多。

输出参数 S 包含一个新的分类变量,指示每行中的堆叠数据来自 U 中的哪个变量。stack 复制 U 中未堆叠的变量中的数据。

  • 如果 U 是表,则不能堆叠行名称。

  • 如果 U 是时间表,则不能堆叠行时间。

示例

S = stack(U,vars,Name,Value) 转换表 U,并通过一个或多个 Name,Value 对组参数指定其他选项。

例如,您可以为 U 中的新堆叠变量指定变量名称。

示例

[S,iu] = stack(___) 还返回索引向量 iu,指示 S 中的行与 U 中的行之间的对应关系。您可以使用以前的任何输入参数。

示例

全部折叠

从三个单独的测试创建一个包含测试分数的表。此表为分叠格式。

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    

变量 StormDate 包含每个位置的常量数据。

将变量 NatickBostonWorcester 堆叠到一个变量中。命名包含堆叠数据的变量 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 相应地复制常变量 StormDate 中的数据。

分类变量 Town 标识 U 中的哪个变量包含对应的 Snowfall 数据。

创建一个时间表,其中包含沿美国东海岸的每月流感发病率估计值。为东北、中大西洋和南大西洋创建另一个变量。数据源:Google Flu Trends (https://www.google.org/flutrends)。使用一个 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 包含跨行的常量数据。

将变量 NEMidAtlSAtl 堆叠到一个名为 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 中要堆叠的变量,指定为正整数、正整数向量、字符向量、字符向量元胞数组、字符串数组或逻辑向量。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: 'NewDataVariableName','StackedData' 命名新数据变量 StackedData

要包括在输出中的 vars 之外的变量,指定为逗号分隔的对组,包含 'ConstantVariables' 和正整数、正整数向量、字符向量、字符向量元胞数组、字符串数组或逻辑向量。stack 为行中的每个堆叠条目复制常变量中的数据。

默认值是 U 中未由 vars 指定的所有变量。您可以指定 'ConstantVariables' 名称-值对组参数,以便从输出表 S 中排除 vars'ConstantVariables' 未指定的变量。

U 可以沿其第一个维度包含行标签。如果 U 是表,则它可以将行名称作为标签。如果 U 是时间表,则它必须将行时间作为标签。

  • 当您指定 'ConstantVariables' 的值时,可以包括行名称或行时间。

  • stack 会复制行名称或行时间,即使您没有在 'ConstantVariables' 中包含它们也是如此。

S 中新数据变量的名称,指定为逗号分隔的对组,其中包含 'NewDataVariableName' 和一个字符向量或字符串标量。默认值是 U 中堆叠的变量名称的串联。

S 中新指示变量的名称,指定为逗号分隔的对组,其中包含 'IndexVariableName' 和一个字符向量或字符串标量。默认值是基于 NewDataVariableName 的名称。

输出参数

全部折叠

堆叠的表,以表或时间表的形式返回。S 包含一个堆叠数据变量、一个分类指示变量以及任何常变量。

您可以在 S 中存储说明、变量单位、变量名称和行名称等附加元数据。有关详细信息,请参阅 tabletimetable 的“属性”部分。

stackvars 中列出的第一个变量中的变量单位和变量说明属性值赋给新数据变量的对应 S.Properties.VariableUnitsS.Properties.VariableDescrisciptions 值。

U 的索引,以列向量形式返回。索引向量 iu 标识输入表 U 中包含对应数据的行。stack 使用 U(iu(j),vars) 在输出表 S 中创建第 j 行。

提示

  • 您可以在 U 中指定多组数据变量,每组数据变量在 S 中将变成一个堆叠的数据变量。使用元胞数组包含 vars 的多个值,使用字符向量元胞数组或字符串数组包含 'NewDataVariableName' 名称-值对组参数的多个值。所有组都必须包含相同数量的变量。

扩展功能

在 R2013b 中推出