Main Content

对时间表中的数据进行重采样和聚合

以下示例演示如何对时间表中的数据进行重采样和聚合。时间表是一种表类型,用于将时间与每一行进行关联。时间表可以存储具有不同数据类型和大小的列向数据变量,前提是每个变量的行数相同。通过 retime 函数,您可以对时间表数据进行重采样,或将时间表数据聚合到指定的时间 bin 中。

导入时间表

加载包含从 2015 年 11 月 15 日到 2015 年 11 月 19 日获取的天气测量值的时间表。该时间表包含在这段时间获取的湿度、温度和压力读数。

load outdoors
outdoors(1:5,:)
ans=5×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:24        49          51.3          29.61   
    2015-11-15 01:30:24      48.9          51.5          29.61   
    2015-11-15 03:00:24      48.9          51.5          29.61   
    2015-11-15 04:30:24      48.8          51.5          29.61   
    2015-11-15 06:00:24      48.7          51.5           29.6   

确定该时间表是否为规则时间表。在规则时间表中,所有连续的行时间之间的差分均相同。outdoors 不是规则时间表。

TF = isregular(outdoors)
TF = logical
   0

求时间步的差分。差分在半分钟到一个半小时之间变化。

dt = unique(diff(outdoors.Time))
dt = 3x1 duration
   00:00:24
   01:29:36
   01:30:00

通过插值对时间表重采样

使用 retime 函数调整时间表中的数据。指定一个按小时计的时间向量。将时间表数据插入到新的行时间中。

TT = retime(outdoors,'hourly','spline');
TT(1:5,:)
ans=5×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:00     49.001        51.298          29.61  
    2015-11-15 01:00:00     48.909        51.467          29.61  
    2015-11-15 02:00:00     48.902         51.51          29.61  
    2015-11-15 03:00:00       48.9          51.5          29.61  
    2015-11-15 04:00:00     48.844        51.498         29.611  

通过最近邻值对时间表进行重采样

TT 指定一个按小时计的时间向量。对于 TT 中的每一行,复制 outdoors 中行时间最近的对应行中的值。

TT = retime(outdoors,'hourly','nearest');
TT(1:5,:)
ans=5×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:00        49          51.3          29.61   
    2015-11-15 01:00:00      48.9          51.5          29.61   
    2015-11-15 02:00:00      48.9          51.5          29.61   
    2015-11-15 03:00:00      48.9          51.5          29.61   
    2015-11-15 04:00:00      48.8          51.5          29.61   

聚合时间表数据并计算日均值

retime 函数提供了聚合方法,例如 mean。计算 outdoors 中的数据的日均值。

TT = retime(outdoors,'daily','mean');
TT
TT=4×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:00     48.931        51.394         29.607  
    2015-11-16 00:00:00     47.924        51.571         29.611  
    2015-11-17 00:00:00      48.45        51.238         29.613  
    2015-11-18 00:00:00       49.5          50.8          29.61  

将时间表数据调整为规则时间

计算以 6 小时为时间间隔的均值。使用 'regular' 输入参数和 'TimeStep' 名称-值对组参数指定一个规则时间步。

TT = retime(outdoors,'regular','mean','TimeStep',hours(6));
TT(1:5,:)
ans=5×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:00       48.9         51.45          29.61  
    2015-11-15 06:00:00       48.9         51.45           29.6  
    2015-11-15 12:00:00     49.025         51.45          29.61  
    2015-11-15 18:00:00       48.9        51.225         29.607  
    2015-11-16 00:00:00       48.5          51.4          29.61  

您也可以指定一个以六小时为时间间隔的时间向量。为该时间向量指定格式,以便在显示时间表时显示日期时间。

tv = datetime(2015,11,15):hours(6):datetime(2015,11,18);
tv.Format = 'dd-MMM-yyyy HH:mm:ss';
TT = retime(outdoors,tv,'mean');
TT(1:5,:)
ans=5×3 timetable
            Time            Humidity    TemperatureF    PressureHg
    ____________________    ________    ____________    __________

    15-Nov-2015 00:00:00       48.9         51.45          29.61  
    15-Nov-2015 06:00:00       48.9         51.45           29.6  
    15-Nov-2015 12:00:00     49.025         51.45          29.61  
    15-Nov-2015 18:00:00       48.9        51.225         29.607  
    16-Nov-2015 00:00:00       48.5          51.4          29.61  

另请参阅

| | |

相关主题