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

按行时间和变量类型选择时间表数据

时间表是一种表类型,用于将时间与每一行进行关联。您可以使用时间表下标,以不同的方式选择其数据子集。要选择行时间位于给定的时间范围内的时间表行,请使用 timerange 函数指定时间范围。由于时间表是一个表,因此您可以使用圆括号或花括号对行和变量建立索引。您可以对特定的行时间进行索引,也可以选择行时间与位于您使用 withtol 函数设置的容差范围内的指定时间匹配的行。您也可以为表或时间表建立下标,以选择与使用 vartype 函数指定的类型匹配的所有变量。最后,使用 Variables 属性将时间表中的数据提取到矩阵中。

基于文件创建时间表

基于样本文件 outages.csv 创建一个时间表,该文件包含表示美国电力中断的数据。使用 readtable 函数读取该文件中的表。将 T.CauseT.Region 转换成分类数组。然后,使用 table2timetable 函数将表转换为时间表。显示时间表的前五行。TT 是一个时间表,其中包含从 2002 年 2 月到 2014 年 1 月的断电数据。

T = readtable('outages.csv');
T.Cause = categorical(T.Cause);
T.Region = categorical(T.Region);
TT = table2timetable(T);
TT(1:5,:)
ans=5×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause     
    ________________    _________    ______    __________    ________________    _______________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    2003-01-23 00:49    SouthEast    530.14    2.1204e+05                 NaT    winter storm   
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    2004-04-06 05:44    West         434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    2002-03-16 06:18    MidWest      186.44    2.1275e+05    2002-03-18 23:23    severe storm   

汇总时间表并访问行时间

显示 TT 的摘要。该摘要是一个时间表,其中包含 1468 行和五个变量。

summary(TT)
RowTimes:

    OutageTime: 1468x1 datetime
        Values:
            Min         2002-02-01 12:18 
            Median      2010-03-18 21:05 
            Max         2014-01-15 02:41 

Variables:

    Region: 1468x1 categorical

        Values:

            MidWest        142   
            NorthEast      557   
            SouthEast      389   
            SouthWest       26   
            West           354   

    Loss: 1468x1 double

        Values:

            Min             0       
            Median          180.26  
            Max             23418   
            NumMissing      604     

    Customers: 1468x1 double

        Values:

            Min             0           
            Median          75765       
            Max             5.9689e+06  
            NumMissing      328         

    RestorationTime: 1468x1 datetime

        Values:

            Min             2002-02-07 16:50  
            Median          2010-03-31 10:54  
            Max             2042-09-18 23:31  
            NumMissing      29                

    Cause: 1468x1 categorical

        Values:

            attack                294   
            earthquake              2   
            energy emergency      188   
            equipment fault       156   
            fire                   25   
            severe storm          338   
            thunder storm         201   
            unknown                24   
            wind                   95   
            winter storm          145   

访问行时间。行时间不在变量中,行时间向量只是时间表的一个属性。但是,您可以使用圆点语法访问行时间。TT.OutageTime 是一个 1468×1 的日期时间值向量。显示 TT.OutageTime 的前五行。

TT.OutageTime(1:5)
ans = 5x1 datetime
   2002-02-01 12:18
   2003-01-23 00:49
   2003-02-07 21:15
   2004-04-06 05:44
   2002-03-16 06:18

对时间范围建立下标

要选择位于某个时间范围内的所有时间表行,请使用 timerange 函数创建下标来作为帮助。您指定的开始时间和结束时间不必与时间表中的任何行时间匹配。

选择断电发生在 2002 年 1 月到 2003 年 12 月之间的所有行。显示 TT2 的前五行。

TR = timerange('2002-01-01','2003-12-31');
TT2 = TT(TR,:);
TT2(1:5,:)
ans=5×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime        Cause    
    ________________    _________    ______    __________    ________________    ____________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm
    2003-01-23 00:49    SouthEast    530.14    2.1204e+05                 NaT    winter storm
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm
    2002-03-16 06:18    MidWest      186.44    2.1275e+05    2002-03-18 23:23    severe storm
    2003-06-18 02:49    West              0             0    2003-06-18 10:54    attack      

显示 TT2 的后五行。

TT2(end-4:end,:)
ans=5×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause      
    ________________    _________    ______    __________    ________________    ________________

    2003-09-02 19:46    SouthEast         0             0    2003-09-16 22:25    severe storm    
    2003-09-15 14:56    MidWest       418.7         61045    2003-09-22 04:21    thunder storm   
    2003-09-24 22:43    SouthWest    2576.9    9.4873e+05    2003-09-25 14:46    severe storm    
    2003-09-18 10:40    SouthWest     301.8    2.3973e+05    2003-09-27 08:17    severe storm    
    2003-10-11 19:36    SouthEast     309.8         93582    2003-10-11 19:49    energy emergency

TT2 是一个仅具有 98 行的时间表,其中只包含 2002 年和 2003 年的断电数据。

对指定时间进行索引

您可以使用表示 TT.OutageTime 中的特定时间的日期时间值或字符向量对 TT 进行索引。但是,当您执行此操作时,所指定的时间必须在时间向量中具有完全匹配项,并且只选择这些时间。根据 TT 的第一行和第三行的时间对 TT 进行索引。

TT({'2002-02-01 12:18:00','2003-02-07 21:15:00'},:)
ans=2×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime        Cause    
    ________________    _________    ______    __________    ________________    ____________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm

使用容差对指定时间进行索引

对时间进行索引时指定一个容差。您可以使用 withtol 函数创建下标来作为帮助。通过 withtol 的输出,您可以选择在指定容差范围内匹配的行时间。

在指定日期对 TT 进行索引。指定一天的容差,以返回行时间位于指定日期中的一天范围内的行。时间必须位于日期时间或持续时间向量中,或者位于可转换为日期时间或持续时间值的字符向量元胞数组中。必须使用 secondsminuteshoursdays 等函数将容差指定为持续时间。

rowTimes = {'2002-02-01','2003-02-07'};
S = withtol(rowTimes,days(1));
TT(S,:)
ans=2×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime        Cause    
    ________________    _________    ______    __________    ________________    ____________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm

按变量类型建立下标

要选择具有给定类型的所有时间表变量,请使用 vartype 函数创建下标来作为帮助。您可以指定变量类型,而不必指定变量的名称或变量在时间表中的位置。

选择包含数值数据的所有变量。TT2 只包含变量 LossCustomersTT 的其他三个变量为分类变量或日期时间变量。显示 TT2 的前五行。

S = vartype('numeric');
TT2 = TT(:,S);
TT2(1:5,:)
ans=5×2 timetable
       OutageTime        Loss     Customers 
    ________________    ______    __________

    2002-02-01 12:18    458.98    1.8202e+06
    2003-01-23 00:49    530.14    2.1204e+05
    2003-02-07 21:15     289.4    1.4294e+05
    2004-04-06 05:44    434.81    3.4037e+05
    2002-03-16 06:18    186.44    2.1275e+05

同时根据时间范围和变量类型建立下标。

TR = timerange('2002-01-01','2003-12-31');
TT2 = TT(TR,S);
TT2(1:5,:)
ans=5×2 timetable
       OutageTime        Loss     Customers 
    ________________    ______    __________

    2002-02-01 12:18    458.98    1.8202e+06
    2003-01-23 00:49    530.14    2.1204e+05
    2003-02-07 21:15     289.4    1.4294e+05
    2002-03-16 06:18    186.44    2.1275e+05
    2003-06-18 02:49         0             0

通过 Variables 属性提取数据

表和时间表具有一个 Variables 属性,您可以使用该属性将数据从变量提取到矩阵中,只要变量可以串联在一起。

使用 Variables 属性从 TT2 提取数值数据。A 是一个 1468×2 的双精度矩阵。当您将数据从时间表提取到数组中时,行时间不包含在内。

A = TT2.Variables;
A(1:5,:)
ans = 5×2
106 ×

    0.0005    1.8202
    0.0005    0.2120
    0.0003    0.1429
    0.0002    0.2128
         0         0

TT2.Variables 的结果与使用花括号通过 TT2{:,:} 语法提取数据的结果相同。

您可以将 TT2 中的变量串联到双精度数组中。但是,TT 包含无法串联的数值变量、分类变量和日期时间变量。无法串联变量时,Variables 属性将会返回错误。要避免此类错误,您可以在使用 Variables 属性之前根据变量类型建立下标。

TT 建立下标,以选择数值变量并将它们提取到矩阵中。

A = TT(:,vartype('numeric')).Variables;
A(1:5,:)
ans = 5×2
106 ×

    0.0005    1.8202
    0.0005    0.2120
    0.0003    0.1429
    0.0004    0.3404
    0.0002    0.2128

另请参阅

| | | | | |

相关主题