How do I truncate a table based on a data window I'd like to use?

20 ビュー (過去 30 日間)
Timothy
Timothy 2023 年 8 月 19 日
回答済み: Seth Furman 2023 年 9 月 14 日
Hello,
I have a table with a DateTime group in the first column. It runs from midnight to midnight on a certain day. I would like to truncate the hours to between 8:00 AM and 3:00 PM, and discard all other data in the table. Is there a way to do this, or do I have to translate the date-time to something different to perform this operation? Thank you.

採用された回答

Voss
Voss 2023 年 8 月 19 日
% I construct a table similar to yours:
TimeReceived = datetime(2023,6,26,0,0,(0:60*60*24-1).',2.6,'Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS');
N = numel(TimeReceived);
TimeSent = 1.6878e18*ones(N,1);
RecordType = 160*ones(N,1);
T = table(TimeReceived,TimeSent,RecordType)
T = 86400×3 table
TimeReceived TimeSent RecordType ______________________________ __________ __________ 26-Jun-2023 00:00:00.002600000 1.6878e+18 160 26-Jun-2023 00:00:01.002600000 1.6878e+18 160 26-Jun-2023 00:00:02.002600000 1.6878e+18 160 26-Jun-2023 00:00:03.002600000 1.6878e+18 160 26-Jun-2023 00:00:04.002600000 1.6878e+18 160 26-Jun-2023 00:00:05.002600000 1.6878e+18 160 26-Jun-2023 00:00:06.002600000 1.6878e+18 160 26-Jun-2023 00:00:07.002600000 1.6878e+18 160 26-Jun-2023 00:00:08.002600000 1.6878e+18 160 26-Jun-2023 00:00:09.002600000 1.6878e+18 160 26-Jun-2023 00:00:10.002600000 1.6878e+18 160 26-Jun-2023 00:00:11.002600000 1.6878e+18 160 26-Jun-2023 00:00:12.002600000 1.6878e+18 160 26-Jun-2023 00:00:13.002600000 1.6878e+18 160 26-Jun-2023 00:00:14.002600000 1.6878e+18 160 26-Jun-2023 00:00:15.002600000 1.6878e+18 160
% keep only rows of T where TimeReceived is between 8 AM and 3 PM inclusive
tod = timeofday(T.TimeReceived);
idx = tod >= hours(8) & tod <= hours(15);
T = T(idx,:)
T = 25200×3 table
TimeReceived TimeSent RecordType ______________________________ __________ __________ 26-Jun-2023 08:00:00.002600000 1.6878e+18 160 26-Jun-2023 08:00:01.002600000 1.6878e+18 160 26-Jun-2023 08:00:02.002600000 1.6878e+18 160 26-Jun-2023 08:00:03.002600000 1.6878e+18 160 26-Jun-2023 08:00:04.002600000 1.6878e+18 160 26-Jun-2023 08:00:05.002600000 1.6878e+18 160 26-Jun-2023 08:00:06.002600000 1.6878e+18 160 26-Jun-2023 08:00:07.002600000 1.6878e+18 160 26-Jun-2023 08:00:08.002600000 1.6878e+18 160 26-Jun-2023 08:00:09.002600000 1.6878e+18 160 26-Jun-2023 08:00:10.002600000 1.6878e+18 160 26-Jun-2023 08:00:11.002600000 1.6878e+18 160 26-Jun-2023 08:00:12.002600000 1.6878e+18 160 26-Jun-2023 08:00:13.002600000 1.6878e+18 160 26-Jun-2023 08:00:14.002600000 1.6878e+18 160 26-Jun-2023 08:00:15.002600000 1.6878e+18 160
  2 件のコメント
Timothy
Timothy 2023 年 8 月 19 日
Thanks!
Voss
Voss 2023 年 8 月 19 日
You're welcome!

サインインしてコメントする。

その他の回答 (1 件)

Seth Furman
Seth Furman 2023 年 9 月 14 日
Alternatively you can use timerange.
TimeReceived = datetime(2023,6,26,0,0,(0:60*60*24-1).',2.6,'Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS');
N = numel(TimeReceived);
TimeSent = 1.6878e18*ones(N,1);
RecordType = 160*ones(N,1);
tt = timetable(TimeReceived,TimeSent,RecordType)
tt = 86400×2 timetable
TimeReceived TimeSent RecordType ______________________________ __________ __________ 26-Jun-2023 00:00:00.002600000 1.6878e+18 160 26-Jun-2023 00:00:01.002600000 1.6878e+18 160 26-Jun-2023 00:00:02.002600000 1.6878e+18 160 26-Jun-2023 00:00:03.002600000 1.6878e+18 160 26-Jun-2023 00:00:04.002600000 1.6878e+18 160 26-Jun-2023 00:00:05.002600000 1.6878e+18 160 26-Jun-2023 00:00:06.002600000 1.6878e+18 160 26-Jun-2023 00:00:07.002600000 1.6878e+18 160 26-Jun-2023 00:00:08.002600000 1.6878e+18 160 26-Jun-2023 00:00:09.002600000 1.6878e+18 160 26-Jun-2023 00:00:10.002600000 1.6878e+18 160 26-Jun-2023 00:00:11.002600000 1.6878e+18 160 26-Jun-2023 00:00:12.002600000 1.6878e+18 160 26-Jun-2023 00:00:13.002600000 1.6878e+18 160 26-Jun-2023 00:00:14.002600000 1.6878e+18 160 26-Jun-2023 00:00:15.002600000 1.6878e+18 160
tr = timerange(datetime(2023,6,26,8,0,0),datetime(2023,6,26,15,0,0),"closed");
tt = tt(tr,:);
head(tt)
TimeReceived TimeSent RecordType ______________________________ __________ __________ 26-Jun-2023 08:00:00.002600000 1.6878e+18 160 26-Jun-2023 08:00:01.002600000 1.6878e+18 160 26-Jun-2023 08:00:02.002600000 1.6878e+18 160 26-Jun-2023 08:00:03.002600000 1.6878e+18 160 26-Jun-2023 08:00:04.002600000 1.6878e+18 160 26-Jun-2023 08:00:05.002600000 1.6878e+18 160 26-Jun-2023 08:00:06.002600000 1.6878e+18 160 26-Jun-2023 08:00:07.002600000 1.6878e+18 160
tail(tt)
TimeReceived TimeSent RecordType ______________________________ __________ __________ 26-Jun-2023 14:59:52.002600000 1.6878e+18 160 26-Jun-2023 14:59:53.002600000 1.6878e+18 160 26-Jun-2023 14:59:54.002600000 1.6878e+18 160 26-Jun-2023 14:59:55.002600000 1.6878e+18 160 26-Jun-2023 14:59:56.002600000 1.6878e+18 160 26-Jun-2023 14:59:57.002600000 1.6878e+18 160 26-Jun-2023 14:59:58.002600000 1.6878e+18 160 26-Jun-2023 14:59:59.002600000 1.6878e+18 160

カテゴリ

Help Center および File ExchangeDates and Time についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by