概述
时间表是一种表类型,用于将时间与每一行进行关联。您可以使用时间表下标,以不同的方式选择其数据子集。要选择行时间位于给定的时间范围内的时间表行,请使用 timerange 函数指定时间范围。由于时间表是一个表,因此您可以使用圆括号或花括号对行和变量建立索引。您可以对特定的行时间进行索引,也可以选择行时间与位于您使用 withtol 函数设置的容差范围内的指定时间匹配的行。您也可以为表或时间表建立下标,以选择与使用 vartype 函数指定的类型匹配的所有变量。最后,使用 Variables 属性将时间表中的数据提取到矩阵中。
基于文件创建时间表
基于样本文件 outages.csv 创建一个时间表,该文件包含表示美国电力中断的数据。使用 readtable 函数读取该文件中的表。将 T.Cause 和 T.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 进行索引。指定一天的容差,以返回行时间位于指定日期中的一天范围内的行。时间必须位于日期时间或持续时间向量中,或者位于可转换为日期时间或持续时间值的字符向量元胞数组中。必须使用 seconds、minutes、hours 或 days 等函数将容差指定为持续时间。
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 只包含变量 Loss 和 Customers。TT 的其他三个变量为分类变量或日期时间变量。显示 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
最后
以上就是光亮滑板为你收集整理的MATLAB 基础知识 数据类型 时间表 按行时间和变量类型选择时间表数据的全部内容,希望文章能够帮你解决MATLAB 基础知识 数据类型 时间表 按行时间和变量类型选择时间表数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复