此示例显示了如何创建一个常规的有缺失、重复或不统一时间的时刻表。时间表是一种与时间戳或行时间,每行数据。在常规时间表中,行时间是排序和唯一的,并且不同的常规时间步长。
此外,某些工具箱具有以数字阵列形式的规则间隔时间序列数据工作的功能。因此,该示例还示出了如何从时间表导出数据以与其他功能一起使用。
行时间存在许多问题,这些问题会使时间表变得不规则。行时间可能会丢失。它们可能会出故障。它们可以是重复的,使用相同的时间创建多个行,这些行可能具有相同或不同的数据。即使它们是存在的,有序的,唯一的,它们也可以因不同大小的时间步长而不同。
时间表提供了许多不同的方法来解决缺失,重复或不均匀的时间,并重新使用或聚合数据以创建正常的行时间。
从mat -文件加载一个时间表示例艰难时期
其中包含2016年6月9日在几个小时内拍摄的天气测量。时间表TT.
包括温度,降雨和在当天在不规则时间内进行的风速测量。
负载艰难时期TT.
TT =12×3的时间表时间临时雨风速 ____________________ ____ ____ _________ 09 - 73年6月- 2016年06:01:04 0.01 - 2.3 09年6月- 2016 07:59:23 59 0.08 - 0.9 09年6月- 2016年09:53:57 59 0.03 - 3.4 09 - 67年6月- 2016年09:53:57 0.03 - 3.4 NaT 56 0 0 09 - 67年6月- 2016年09:53:57 0.03 - 3.4 09 - 62年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 75.8 0.01 2.7 09 - 82年6月- 2016年08:49:10 0.01 - 2.709-Jun-2016 05:03:11 66.2 0.05 3 09-Jun-2016 08:49:10 67.2 0.01 2.7 09-Jun-2016 04:12:00 58.8
一种开始的方法是查找和删除具有NaT
或作为行时间缺少值。在行时间向量中找到缺少值,使用ismissing
.的ismissing
函数返回包含的逻辑向量1
无论tt.time.
有一个缺失的价值。
natRowTimes = ismissing (TT.Time)
natRowTimes =12 x1逻辑阵列0 0 0 1 1 0 0 0 0⋮
为了只保留那些没有缺失值的行作为行时间,索引到TT.
使用~ natRowTimes
行指标。给这些行分配一个新的时间表,goodRowTimesTT
.
goodRowTimesTT = TT (~ natRowTimes,:)
goodrowtimestt =11×3时间表时间临时雨风速 ____________________ ____ ____ _________ 09 - 73年6月- 2016年06:01:04 0.01 - 2.3 09年6月- 2016年07:59:23 59 0.08 - 0.9 09 - 2016年6月——09:53:57 59 0.03 - 3.4 09 - 67年6月- 2016年09:53:57 0.03 0.03 - 3.4 3.4 09 - 67年6月- 2016年09:53:57 09 - 62年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 75.8 0.01 2.7 09 - 82年6月- 2016年08:49:10 0.01 - 2.7 09 - jun - 201605:03:11 66.2 0.05 3 09-Jun-2016 08:49:10 67.2 0.01 2.7 09-Jun-2016 04:12:00 58.8
此方法只删除缺少行时间的行。时间表变量仍然可能有丢失的数据值。例如,的最后一行goodRowTimesTT
已南
的值雨
和风速
变量。
作为替代方案,您可以通过使用的同时删除缺失的行时间和缺少数据值rmmissing
函数。rmmissing
删除具有缺少行时间,缺少数据值或两者的任何时间表行。
显示缺失的行时间和缺失的数据值TT.
.
TT.
TT =12×3的时间表时间临时雨风速 ____________________ ____ ____ _________ 09 - 73年6月- 2016年06:01:04 0.01 - 2.3 09年6月- 2016 07:59:23 59 0.08 - 0.9 09年6月- 2016年09:53:57 59 0.03 - 3.4 09 - 67年6月- 2016年09:53:57 0.03 - 3.4 NaT 56 0 0 09 - 67年6月- 2016年09:53:57 0.03 - 3.4 09 - 62年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 75.8 0.01 2.7 09 - 82年6月- 2016年08:49:10 0.01 - 2.709-Jun-2016 05:03:11 66.2 0.05 3 09-Jun-2016 08:49:10 67.2 0.01 2.7 09-Jun-2016 04:12:00 58.8
删除具有缺失行次数或数据值的所有行。将剩余的行分配给时间表goodValuesTT
.
goodvaluestt = rmmissing(tt)
goodValuesTT =10×3的时间表时间临时雨风速 ____________________ ____ ____ _________ 09 - 73年6月- 2016年06:01:04 0.01 - 2.3 09年6月- 2016年07:59:23 59 0.08 - 0.9 09 - 2016年6月——09:53:57 59 0.03 - 3.4 09 - 67年6月- 2016年09:53:57 0.03 0.03 - 3.4 3.4 09 - 67年6月- 2016年09:53:57 09 - 62年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 75.8 0.01 2.7 09 - 82年6月- 2016年08:49:10 0.01 - 2.7 09 - jun - 201605:03:11 66.2 0.05 3 09-Jun-2016 08:49:10 67.2 0.01 2.7
处理完缺失值后,您可以继续对您的时间表进行排序,然后确定排序后的时间表是否有规律。
确定if.goodValuesTT
已经排序,使用issorted
函数。
TF = Sensorted(GoodValuestt)
tf =逻辑0.
由于它不是,使用sortrows
函数。
sortedTT = sortrows (goodValuesTT)
sortedtt =.10×3的时间表时间临时雨风速 ____________________ ____ ____ _________ 09 - 2016年6月——05:03:11 66.2 - 0.05 3 09 - 73年6月- 2016年06:01:04 0.01 - 2.3 09年6月- 2016年07:59:23 59 0.08 - 0.9 09 - 62年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 75.8 0.01 2.7 09 - 82年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 67.2 0.01 2.7 09 - 2016年6月——09:53:57 59 0.03 - 3.4 09 - jun - 201609- june -2016 09:53:57 67 0.03 3.4
确定是否sortedTT
是常规的。一个固定的时间表在连续的行时间之间有相同的时间间隔。即使是一个有序的时间表也可能有不统一的时间步骤。
tf = isregular (sortedTT)
tf =逻辑0.
因为它不是,显示行时间之间的差异。
diff(sortedtt.time)
ans =9 x1持续时间00:57:53 00:58:19 00:49:47 00:00:00 00:00:00 00:00:00
由于排序行时间,因此该结果表明某些行时间是唯一的,有些则是重复的。
时间表可以有重复的行。如果时间表行具有相同的行时间和相同的数据值,则它们是副本。在本例中,的最后两行sortedTT
是重复的行。(还有其他行sortedTT
具有重复的行时间但不同的数据值。)
从中删除重复的行sortedTT
,使用独特的
.的独特的
函数返回唯一行并按行次级排序。
uniqueRowsTT =独特(sortedTT)
uniqueRowsTT =9×3的时间表时间临时雨风速 ____________________ ____ ____ _________ 09 - 2016年6月——05:03:11 66.2 - 0.05 3 09 - 73年6月- 2016年06:01:04 0.01 - 2.3 09年6月- 2016年07:59:23 59 0.08 - 0.9 09 - 62年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016年08:49:10 67.2 0.01 2.7 09 - 2016年6月——08:49:10 75.8 0.01 2.7 09 - 82年6月- 2016年08:49:10 0.01 - 2.7 09年6月- 2016 09:53:57 59 0.03 - 3.4 09年6月- 201609:53:57 67 0.03 3.4
时间表可以有具有重复行时间但数据值不同的行。在这个例子中,uniquerrowstt
具有具有相同行时间但不同值的几行。
查找具有重复行时间的行。首先,对行时间进行排序,并找出连续的没有差异的行时间。它们之间没有区别的时间是重复的。将索引返回到行时间向量中,并返回唯一的时间集合,该集合标识重复的行时间uniquerrowstt
.
duplime = sort(uniquerrowstt.time);tf =(diff(dullime)== 0);duplimes = duptime(tf);duplimes =独特(破坏时间)
dupTimes =2 x1 datetime09-Jun-2016 08:49:10 09-Jun-2016 09:53:57
若要显示具有重复行时间的行,请索引intouniquerrowstt
使用dupTimes
.当您初始索引时,输出时间表包含具有匹配行时间的所有行。
uniqueRowsTT (dupTimes:)
ans =6×3时间表时间温度雨风速____________________ _________________ 09-Jun-2016 08:49:10 62 0.01 2.7 09-Jun-2016 08:49:10 67.2 0.01 2.7 09-Jun-2016 08:49:10 75.8 0.01 2.7 09-Jun-2016 08:49:10 82 0.01 2.7 09-Jun-2016 09:53:57 59 0.03 3.4 09-Jun-2016 09:53:57 67 0.03 3.4
当时间表具有重复时间的行时,您可能需要选择特定行并丢弃具有复制时间的其他行。例如,您可以通过使用重复的行时间选择第一个或最后一行的行独特的
和调整时间
功能。
首先,创建唯一行时间的向量TT.
通过使用独特的
.
uniqueTimes =独特(uniqueRowsTT.Time)
Uniquetimes =.5 x1 datetime09-Jun-2016 05:03:11 09-Jun-2016 06:01:04 09-Jun-2016 07:59:23 09-Jun-2016 08:49:10 09-Jun-2016 09:53:57
从每一组具有重复时间的行中选择第一行。要从第一行复制数据,请指定“firstvalue”
方法。
firstUniqueRowsTT =调整时间(uniqueRowsTT uniqueTimes,“firstvalue”的)
FirstuniquerOWSTT =5×3的时间表时间温度雨风速____________________ _________________ 09-Jun-2016 05:03:11 66.2 0.05 3 09-Jun-2016 06:01:04 73 0.01 2.3 09-Jun-2016 07:59:23 59 0.08 0.9 09-Jun-2016 08:49:10 62 0.01 2.7 09-Jun-2016 09:53:57 59 0.03 3.4
从具有重复时间的每组行中选择最后行。要从最后行复制数据,请指定“lastvalue”
方法。
LastuniquerOWSTT = RETIME(UniqueRowStt,Uniquetimes,“lastvalue”的)
lastuniquerowstt =5×3的时间表时间临时雨风风速____________________ ______________ 09-jun-2016 05:03:11 66.2 0.05:03 09-Jun-2016 06:01:04 73 0.01 0.3 09-Jun-2016 07:59:23 59 0.08 0.9 09-Jun 0.08 0.9 09-Jun 0.08 0.9 09-Jun-2016 08:49:10 82 0.01 2.7 09-Jun-2016 09:53:57 67 0.03 3.4
因此,最后两行firstUniqueRowsTT
和LastuniquerOWSTT
有不同的值临时
多变的。
另一种处理具有复制时间的行中的数据的方法是以某种方式聚合或组合数据值。例如,您可以计算同时拍摄相同数量的多个测量的手段。
方法计算具有重复行次数的行的平均温度、降雨量和风速调整时间
函数。
meanTT =调整时间(uniqueRowsTT uniqueTimes,“的意思是”的)
意思是5×3的时间表时间温度雨风速____________________ __________________ 09-Jun-2016 05:03:11 66.2 0.05 3 09-Jun-2016 06:01:04 73 0.01 2.3 09-Jun-2016 07:59:23 59 0.08 0.9 09-Jun-2016 08:49:10 71.75 0.01 2.7 09-Jun-2016 09:53:57 63 0.03 3.4
因此,最后两行meanTT
有平均温度临时
具有重复行时间的行的变量。
最后,您可以通过使用不规则时间表来重写数据来定期使用调整时间
函数。例如,您可以插入数据meanTT
到一个固定的每小时时间向量上。要使用线性插值,请指定'线性'
.每一行时间hourlyTT
从小时开始,连续行时间之间有一个小时的间隔。
hourlyTT =调整时间(meanTT,“每小时”那'线性'的)
hourlyTT =6×3时间表Time Temp Dire Windeed ________________________________________05:00:00 09-Jun-2016 06:00:00 72.875 0.090737 2.3129 09-Jun-2016 07:00:00 66.027 0.027 0.027 09-Jun 1.6027 09-Jun 1.6027 09-Jun 1.6027 09-Jun-2016 08:00:00 59.158 0.079133 0.9223 09-jun-2016 09:00:00 70.287 0.013344 2.8171 09-jun-2016 10:00:00 62.183 0.031868 3.4654
而不是使用预定义的时间步长,例如“每小时”
,您可以指定自己的时间步长。要指定30分钟的时间步长,请使用“普通”
输入参数和“步伐”
名称值参数。您可以指定任何大小的时间步骤持续时间
或calendarDuration
价值。
regularTT =调整时间(meanTT,“普通”那'线性'那“步伐”,分钟(30))
regularTT =11×3时间表时间温度雨风速____________________ ______________ _________ 09-Jun-2016 05:00:00 65.826 0.0522 3.085 09-Jun-2016 05:30:00 69.35 0.031468 2.6757 09-Jun-2016 06:00:00 72.875 0.010737 2.3129 09-Jun-2016 06:30:00 69.576 0.027118 1.9576 09-Jun-2016 07:00:00 66.027 0.044867 1.6027 09-Jun-2016 07:30:00 62.477 0.062616 1.2477 09-Jun-201608:00:00 59.158 0.079133 0.9223 09- june -2016 08:30:00 66.841 0.03695 2.007 09- june -2016 09:00:00 70.287 0.013344 2.8171
您可以导出时间表数据,以便与相关功能一起分析时间间隔有规律的数据。例如,Econometrics工具箱™和信号处理工具箱™具有一些功能,您可以使用它们对定期间隔的数据进行进一步分析。
以数组形式提取时间表数据。你可以使用变量
属性以返回数组形式的数据,只要表变量具有允许连接它们的数据类型。
a = staralartt.variables.
A =11×30.0315 2.6757 72.8747 0.0107 2.3129 69.5764 0.0271 66.0266 0.0449 1.6027 62.4768 0.0626 1.2477 59.1579 0.0791 0.9223 66.8412 0.0370 2.0070 70.2868 0.0133 2.8171 66.2348 0.0226 3.1412⋮
regularTT。变量
等价于使用花括号语法,regularTT {:,:}
,以访问时间表变量中的数据。
A2 = regularTT {:,:}
A2 =11×30.0315 2.6757 72.8747 0.0107 2.3129 69.5764 0.0271 66.0266 0.0449 1.6027 62.4768 0.0626 1.2477 59.1579 0.0791 0.9223 66.8412 0.0370 2.0070 70.2868 0.0133 2.8171 66.2348 0.0226 3.1412⋮
时间表
|table2timesable.
|调整时间
|issorted
|sortrows
|独特的
|差点
|isregular
|rmmissing
|填充