主要内容

清除时间表缺失,重复,或不一致的时间

这个例子展示了如何创建一个有规律的有缺失、重复或不统一时间的时刻表。时间表是一种与时间戳或行时间,每一行数据。在常规时间表中,行时间是有序且唯一的,并且不同于相同的常规时间步长。

另外,一些工具箱具有处理数字数组形式的定期间隔时间序列数据的功能。因此,该示例还展示了如何从时间表中导出数据,以便与其他函数一起使用。

行时间存在许多问题,可能导致时间表不规则。行时间可能丢失。它们可能会出故障。它们可以是重复的,在同一时间创建可能具有相同或不同数据的多行。即使它们存在、分类和唯一,它们也可能因大小不同的时间步而有所不同。

时间表提供了许多不同的方法来解决缺失、重复或不一致的时间,并重新取样或聚合数据以创建常规的行时间。

  • 要找到缺少的行时间,使用ismissing

  • 若要删除丢失的时间和数据,请使用RMM缺失

  • 要按行时对时间表排序,请使用索特罗斯

  • 要制作具有唯一和排序行时间的时间表,请使用独特的休息时间

  • 若要删除重复的时间,请指定一个具有唯一时间的向量并使用休息时间

  • 要制定有规律的时间表,请指定有规律的时间矢量和使用休息时间

负载的时间表

从MAT文件加载示例时间表badTimes其中包含了2016年6月9日几个小时的天气测量数据。的时间表TT包括温度,降雨量和风速的测量在那天不定期的时间。

负载badTimesTT
TT=12×3时刻表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度2016年6月9日08:49:10 75.8 0.01 2.7 09-Jun-2016 08:49:10 82 0.01 2.7 09 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。时间缺少一个值。

natRowTimes=ismissing(TT.时间)
natRowTimes =12x1逻辑阵列0 0 0 1 1 0 0 0 0⋮

若要仅将不缺少值的行保留为行时间,请将其索引到TT使用~ natRowTimes作为行索引。将这些行分配给新的时间表,古德罗维特

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

此方法仅删除缺少行时间的行。时间表变量可能仍然缺少数据值。例如,文件的最后一行古德罗维特的值风速变量。

删除缺少时间和数据的行

作为一种替代方法,您可以使用RMM缺失函数。RMM缺失删除任何缺少行时间、缺少数据值或两者兼有的时间表行。

显示缺少的行时间和缺少的数据值TT

TT
TT=12×3时刻表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度2016年6月9日08:49:10 75.8 0.01 2.7 09-Jun-2016 08:49:10 82 0.01 2.7 09 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

排序时间表并确定它是否是常规的

在处理完丢失的值后,您可以继续对时间表进行排序,然后确定排序后的时间表是否正常。

来确定goodValuesTT已排序,请使用issorted函数。

tf = issorted (goodValuesTT)
tf =逻辑0

由于不是,请使用索特罗斯函数。

sortedTT = sortrows (goodValuesTT)
sortedTT =10×3时刻表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度2016年6月08:49:1067.2 0.01 2.7 09-Jun-2016 09:53:57 59 0.03 3.4 09-Jun-201609:53:57 67 0.03 3.4 09-Jun-2016 09:53:57 67 0.03 3.4

确定是否sortedTT是常规的。常规时间表在连续的行时间之间具有相同的时间间隔。即使排序的时间表也可能具有不一致的时间步长。

tf=isregular(分拣的DTT)
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=唯一(分拣DTT)
尤尼克洛维特=9×3时刻表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度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-201609:53:57 67 0.03 3.4

查找具有重复时间和不同数据的行

时间表可以有具有重复行时间但数据值不同的行。在这个例子中,uniqueRowsTT具有多行,行时间相同,但值不同。

查找具有重复行时间的行。首先,对行时间进行排序,并找出连续的没有差异的行时间。它们之间没有区别的时间是重复的。将索引返回到行时间向量中,并返回唯一的时间集合,该集合标识重复的行时间uniqueRowsTT

dupTimes = (uniqueRowsTT.Time)进行排序;tf = (diff(dupTimes) == 0);dupTimes = dupTimes (tf);dupTimes =独特(dupTimes)
双重=2 x1 datetime2016年6月9日08:49:10 2016年6月9:53:57

若要显示具有重复行时间的行,请索引intouniqueRowsTT使用双重.当按时间建立索引时,输出时间表将包含具有匹配行时间的所有行。

uniqueRowsTT(重复次数,:)
ans=6×3的时间表中国UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度天气天气天气天气天气天气天气天气天气天气天气天气天气温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度温度四,

选择具有重复次数的第一行和最后一行

当时间表有重复时间的行时,您可能希望选择特定的行,并丢弃其他具有重复时间的行。例如,可以使用独特的休息时间功能。

首先,创建一个唯一行时间的向量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

从每一组具有重复时间的行中选择第一行。要从第一行复制数据,请指定“第一价值”方法

firstUniqueRowsTT=重定时(uniqueRowsTT,uniqueTimes,“第一价值”
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 =调整时间(uniqueRowsTT uniqueTimes,“lastvalue”
lastUniqueRowsTT =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 82 0.01 2.7 09-Jun-2016 09:53:57 67 0.03 3.4

因此,最后两行第一大学lastUniqueRowsTT有不同的值临时雇员变量。

从重复次数的所有行聚合数据

处理具有重复时间的行中的数据的另一种方法是以某种方式聚合或组合数据值。例如,您可以计算在同一时间对相同数量的几个测量的平均值。

使用休息时间函数。

meanTT =调整时间(uniqueRowsTT uniqueTimes,“中庸”
meanTT =5×3时刻表时间-温度-降雨风速-2016年6月05:03:11 66.20.05-2016年6月09日06:01:04 73 0.01 2.3 09-Jun-2016 07:59:23 59 0.08 0.9-Jun-2016 08:10.71-07.03:03

因此,最后两行meanTT有平均气温吗临时雇员变量表示具有重复行时间的行。

使时间表有规律

最后,您可以重新抽样数据从一个不规则的时间表,使它有规律地使用休息时间作用例如,可以从中插值数据meanTT一个固定的小时时间向量。要使用线性插值,请指定“线性”.每一行时间霍利特从小时开始,连续的行时间间隔为一小时。

hourlyTT =调整时间(meanTT,“每小时”“线性”
霍利特=6×3的时间表时间温度雨风速____________________ ______________ _________ 09-Jun-2016 05:00:00 65.826 0.0522 3.085 09-Jun-2016 06:00:00 72.875 0.010737 2.3129 09-Jun-2016 07:00:00 66.027 0.044867 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工具箱™和信号处理工具箱™具有一些功能,您可以使用它们对定期间隔的数据进行进一步分析。

将时间表数据提取为数组。你可以使用变量属性以返回数组形式的数据,只要表变量具有允许连接它们的数据类型。

一个= regularTT。变量
一个=11×365.8260 0.0522 3.0385 69.3504 0.0315 2.6757 72.8747 0.0107 2.3129 69.5764 0.0271 1.9576 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 ⋮

调节变量相当于使用大括号语法,调节器{:,:},以访问时间表变量中的数据。

A2=调节器{:,:}
A2=11×365.8260 0.0522 3.0385 69.3504 0.0315 2.6757 72.8747 0.0107 2.3129 69.5764 0.0271 1.9576 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 ⋮

另请参阅

|||||||||

相关话题