从两个具有不同 date/time 格式的 matlab table 合并到 table
Merge into table from two matlab tables with different date/time format
我有两个Matlab表格,想合并进去,但是时间间隔不一样。提前致谢
- 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小时,依此类推
- 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
- 而现在,我想使用 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
我有两个Matlab表格,想合并进去,但是时间间隔不一样。提前致谢
- 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小时,依此类推
- 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
- 而现在,我想使用 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