您可以通过各种方式来合并时间表并同步其数据。您可以垂直或水平串联时间表,但前提是时间表中包含相同的行时间或时间表变量。使用 synchronize 函数可合并具有不同行时间和时间表变量的时间表。synchronize 会创建一个包含所有输入时间表中的全部变量的时间表。然后,它会将输入时间表中的数据同步到输出时间表的行时间。synchronize 可以使用缺失数据指示符、从最近邻行复制的值或插入的值来填充输出时间表的缺失元素。synchronize 还可以聚合所指定的时间 bin 上的时间表数据。
垂直串联时间表
从 openPricesSmall 加载时间表并将它们垂直串联。这些时间表为 opWeek1 和 opWeek2。它们包含一些股票在 2016 年 1 月的第一周和第二周期间的开盘价。
load openPricesSmall
显示这两个时间表。
opWeek1
opWeek1=5×2 timetable
Time AAPL FB
____________________ ______ ______
08-Jan-2016 09:00:00 98.55 99.88
07-Jan-2016 09:00:00 98.68 100.5
06-Jan-2016 09:00:00 100.56 101.13
05-Jan-2016 09:00:00 105.75 102.89
04-Jan-2016 09:00:00 102.61 101.95
opWeek2
opWeek2=5×2 timetable
Time AAPL FB
____________________ ______ ______
14-Jan-2016 09:00:00 97.96 95.85
13-Jan-2016 09:00:00 100.32 100.58
12-Jan-2016 09:00:00 100.55 99
11-Jan-2016 09:00:00 98.97 97.91
08-Jan-2016 09:00:00 98.55 99.88
串联这些时间表。当时间表具有相同的变量时,您可以垂直串联它们。行时间用于为各行添加标签,未包含在时间表变量中。请注意,时间表的行时间可以不按顺序,并且不必具有固定间隔。例如,op 不包含时值周末的日期。时间表还可以包含重复的时间。op 包含两行 08-Jan-2016 09:00:00 数据。
op = [opWeek2;opWeek1]
op=10×2 timetable
Time AAPL FB
____________________ ______ ______
14-Jan-2016 09:00:00 97.96 95.85
13-Jan-2016 09:00:00 100.32 100.58
12-Jan-2016 09:00:00 100.55 99
11-Jan-2016 09:00:00 98.97 97.91
08-Jan-2016 09:00:00 98.55 99.88
08-Jan-2016 09:00:00 98.55 99.88
07-Jan-2016 09:00:00 98.68 100.5
06-Jan-2016 09:00:00 100.56 101.13
05-Jan-2016 09:00:00 105.75 102.89
04-Jan-2016 09:00:00 102.61 101.95
水平串联时间表
您也可以水平串联时间表。这些时间表必须具有相同的行时间和不同的变量。
显示时间表 opOtherStocks。该时间表与 opWeek1 具有相同的行时间,但变量表示不同的股票。
opOtherStocks
opOtherStocks=5×2 timetable
Time MSFT TWTR
____________________ _____ _____
08-Jan-2016 09:00:00 52.37 20.51
07-Jan-2016 09:00:00 52.7 21
06-Jan-2016 09:00:00 54.32 21.62
05-Jan-2016 09:00:00 54.93 22.79
04-Jan-2016 09:00:00 54.32 22.64
串联 opWeek1 和 opOtherStock。输出时间表包含一组行时间以及两个时间表中的变量。
op = [opWeek1 opOtherStocks]
op=5×4 timetable
Time AAPL FB MSFT TWTR
____________________ ______ ______ _____ _____
08-Jan-2016 09:00:00 98.55 99.88 52.37 20.51
07-Jan-2016 09:00:00 98.68 100.5 52.7 21
06-Jan-2016 09:00:00 100.56 101.13 54.32 21.62
05-Jan-2016 09:00:00 105.75 102.89 54.93 22.79
04-Jan-2016 09:00:00 102.61 101.95 54.32 22.64
同步时间表并指示缺失数据
从两个不同的时间表加载空气质量数据和天气测量值,并将这两个时间表进行同步。测量值的日期范围从 2015 年 11 月 15 日到 2015 年 11 月 19 日。空气质量数据来自建筑物内部的传感器,而天气测量值来自外部传感器。
load indoors
load outdoors
显示每个时间表的前五行。它们包含在不同时间获取的具有不同数量的测量值。
indoors(1:5,:)
ans=5×2 timetable
Time Humidity AirQuality
___________________ ________ __________
2015-11-15 00:00:24 36 80
2015-11-15 01:13:35 36 80
2015-11-15 02:26:47 37 79
2015-11-15 03:39:59 37 82
2015-11-15 04:53:11 36 80
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
同步这些时间表。输出时间表 tt 包含两个时间表的所有时间。synchronize 会在 tt 中未放置数据值的位置放置一个缺失数据指示符。如果两个输入时间表包含一个同名变量(如 Humidity),synchronize 将会重命名这两个变量并将二者都添加到输出时间表。
tt = synchronize(indoors,outdoors);
tt(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:24 36 80 49 51.3 29.61
2015-11-15 01:13:35 36 80 NaN NaN NaN
2015-11-15 01:30:24 NaN NaN 48.9 51.5 29.61
2015-11-15 02:26:47 37 79 NaN NaN NaN
2015-11-15 03:00:24 NaN NaN 48.9 51.5 29.61
同步并插入数据值
同步时间表并通过线性插值填充缺失的时间表元素。要根据包含两个时间表中的所有时间的时间向量进行同步,请为输出时间指定 ‘union’。
ttLinear = synchronize(indoors,outdoors,'union','linear');
ttLinear(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:24 36 80 49 51.3 29.61
2015-11-15 01:13:35 36 80 48.919 51.463 29.61
2015-11-15 01:30:24 36.23 79.77 48.9 51.5 29.61
2015-11-15 02:26:47 37 79 48.9 51.5 29.61
2015-11-15 03:00:24 37 80.378 48.9 51.5 29.61
同步到规则时间
将这些时间表同步到一个按小时计的时间向量。输入时间表具有不规则行时间。输出时间表具有规则行时间,时间步为一个小时。
ttHourly = synchronize(indoors,outdoors,'hourly','linear');
ttHourly(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:00 36 80 49 51.299 29.61
2015-11-15 01:00:00 36 80 48.934 51.432 29.61
2015-11-15 02:00:00 36.634 79.366 48.9 51.5 29.61
2015-11-15 03:00:00 37 80.361 48.9 51.5 29.61
2015-11-15 04:00:00 36.727 81.453 48.834 51.5 29.61
将时间表同步到 30 分钟的时间步。使用 ‘regular’ 输入参数和 ‘TimeStep’ 名称-值对组参数指定一个规则时间步。
ttHalfHour = synchronize(indoors,outdoors,'regular','linear','TimeStep',minutes(30));
ttHalfHour(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:00 36 80 49 51.299 29.61
2015-11-15 00:30:00 36 80 48.967 51.366 29.61
2015-11-15 01:00:00 36 80 48.934 51.432 29.61
2015-11-15 01:30:00 36.224 79.776 48.9 51.499 29.61
2015-11-15 02:00:00 36.634 79.366 48.9 51.5 29.61
您也可以将这些时间表同步到一个时间间隔指定为半小时的时间向量。
tv = [datetime(2015,11,15):minutes(30):datetime(2015,11,18)];
tv.Format = indoors.Time.Format;
ttHalfHour = synchronize(indoors,outdoors,tv,'linear');
ttHalfHour(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:00 36 80 49 51.299 29.61
2015-11-15 00:30:00 36 80 48.967 51.366 29.61
2015-11-15 01:00:00 36 80 48.934 51.432 29.61
2015-11-15 01:30:00 36.224 79.776 48.9 51.499 29.61
2015-11-15 02:00:00 36.634 79.366 48.9 51.5 29.61
同步并聚合数据值
同步这些时间表并计算输出时间表中的所有变量的日均值。
ttDaily = synchronize(indoors,outdoors,'daily','mean');
ttDaily
ttDaily=4×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:00 36.5 80.05 48.931 51.394 29.607
2015-11-16 00:00:00 36.85 80.35 47.924 51.571 29.611
2015-11-17 00:00:00 36.85 79.45 48.45 51.238 29.613
2015-11-18 00:00:00 NaN NaN 49.5 50.8 29.61
将这些时间表同步到以 6 小时为时间间隔,并计算每个间隔的均值。
tt6Hours = synchronize(indoors,outdoors,'regular','mean','TimeStep',hours(6));
tt6Hours(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:00 36.4 80.2 48.9 51.45 29.61
2015-11-15 06:00:00 36.4 79.8 48.9 51.45 29.6
2015-11-15 12:00:00 36.6 80.4 49.025 51.45 29.61
2015-11-15 18:00:00 36.6 79.8 48.9 51.225 29.607
2015-11-16 00:00:00 36.6 80.2 48.5 51.4 29.61
也可以指定一个以六小时为时间间隔的时间向量。
tv = [datetime(2015,11,15):hours(6):datetime(2015,11,18)];
tv.Format = indoors.Time.Format;
tt6Hours = synchronize(indoors,outdoors,tv,'mean');
tt6Hours(1:5,:)
ans=5×5 timetable
Time Humidity_indoors AirQuality Humidity_outdoors TemperatureF PressureHg
___________________ ________________ __________ _________________ ____________ __________
2015-11-15 00:00:00 36.4 80.2 48.9 51.45 29.61
2015-11-15 06:00:00 36.4 79.8 48.9 51.45 29.6
2015-11-15 12:00:00 36.6 80.4 49.025 51.45 29.61
2015-11-15 18:00:00 36.6 79.8 48.9 51.225 29.607
2015-11-16 00:00:00 36.6 80.2 48.5 51.4 29.61