从两个具有不同 date/time 格式的 matlab table 合并到 table

Merge into table from two matlab tables with different date/time format

我有两个Matlab表格,想合并进去,但是时间间隔不一样。提前致谢

  1. Table TEST_1 时间间隔为 3 小时,关键数据为 DINDEX。
DUT                DINDEX    
2018/8/4           0.7   
2018/8/4 3:00:00   1.3   
2018/8/4 9:00:00   0.7   
2017/8/4 9:00:00   0.7   
2018/10/5          0     
2018/10/5 9:00:00  0.3   
2018/10/5 18:00:00 1     
2018/10/5 21:00:00 0.7   
2018/10/10         0.7

例如,

第一行显示时间范围在2018/8/400:00:00和2018/8/43:00:00之间,时间间隔为3小时。

第二行显示时间范围在2018/8/43:00:00和2018/8/46:00:00之间,间隔3小时,依此类推

  1. DATE Table TABLE_2 没有正则。
UT                                  KP  
2018/8/4 1:02:05.421000       
2018/8/4 4:02:06.921000                 
2018/8/4 9:02:08.421000       
2017/8/4 9:02:09.921000                 
2018/10/5 1:02:11.421000      
2018/10/5 10:02:14.421000               
2018/10/5 19:02:15.921000     
2018/10/5 21:02:17.421000               
2018/10/10 0:02:18.921000
  1. 而现在,我想使用 Table TEST_1 中的关键数据 DINDEX 按时间合并到 Table TEST_2 的字段 KP 中,我期望的是:
UT                                  KP 
2018/8/4 1:02:05.421000             0.7
2018/8/4 4:02:06.921000             1.3
2018/8/4 9:02:08.421000             0.7
2017/8/4 9:02:09.921000             0.7
2018/10/5 1:02:11.421000            0  
2018/10/5 10:02:14.421000           0.3
2018/10/5 19:02:15.921000           1  
2018/10/5 21:02:17.421000           0.7
2018/10/10 0:02:18.921000           0.7

第一个UT(2018/8/41:02:05.421000)在2018/8/400:00:00和2018/8/43:00:00之间,所以KP的第一个UT是0.7,对应第一个DINDEX。

您可以使用 timetable 操作 retime 来完成此操作。这允许您以多种方式“插入”时间序列数据。这是一个我认为与您所描述的有些相似的捏造示例:

先做一些regularly-spaced数据,放入时间表

>> regularData = timetable(datetime(2018,8,4) + hours(0:6:48)', randi(10, 9, 1))
regularData =
  9x1 timetable
            Time            Var1
    ____________________    ____
    04-Aug-2018 00:00:00      9
    04-Aug-2018 06:00:00      6
    04-Aug-2018 12:00:00      6
    04-Aug-2018 18:00:00     10
    05-Aug-2018 00:00:00      3
    05-Aug-2018 06:00:00      8
    05-Aug-2018 12:00:00      8
    05-Aug-2018 18:00:00      4
    06-Aug-2018 00:00:00      6
   

这些是我们希望插入的时间

>> wantTimes = datetime(2018,8,4) + hours(sort(48 * rand(5,1)))
wantTimes =
  5x1 datetime array
   04-Aug-2018 02:35:22
   04-Aug-2018 03:38:27
   05-Aug-2018 01:28:41
   05-Aug-2018 13:24:00
   05-Aug-2018 20:49:57

使用 'nearest' 个值执行插值。

>> retime(regularData, wantTimes, 'nearest')
ans =
  5x1 timetable
            Time            Var1
    ____________________    ____
    04-Aug-2018 02:35:22     9
    04-Aug-2018 03:38:27     6
    05-Aug-2018 01:28:41     3
    05-Aug-2018 13:24:00     8