How to do basic time arithmetic when NaNs are involved

Hi,
I have the following table and I simply want to calculate the elapsed time between start and end points. My main problem is that I dont know how to handle the NaNs. The desired output is elapsed_time (in hours).
start_date = {NaN, '2019-05-21 00:00:00', '2019-05-22 00:00:00', '2019-05-23 00:00:00'}'
start_time = {'13:00', NaN, '01:00', '04:00'}'
end_date = {'2019-05-20 00:00:00', '2019-05-21 00:00:00', NaN, '2019-05-23 00:00:00'}'
end_time = {'14:00', '03:00', NaN, '05:00'}'
T = table(start_date, start_time, end_date, end_time)
% Desired output
T.elapsed_time = {NaT, NaT, NaT, '01:00'}'
Thank you,

Answers (1)

Replace the NaN numeric values in your date cell arrays with 'NaT' and the NaN numeric values in your time cell arrays with 'NaN'. When I did this in release R2020a I was able to convert the dates to datetime arrays and the times to duration arrays by calling datetime and duration (with a value for the InputFormat option) respectively. Then just add and subtract them using + and -.

1 Comment

Hi Steven,
Im not too sure how you are doing that replacement bit. Something along the lines of this ?
idx = cellfun(@isnan, T.start_date, 'UniformOutput', false)
T.start_date(idx) = 'Nat'
idx = cellfun(@isnan, T.end_date, 'UniformOutput', false)
T.end_date(idx) = 'Nat'
idx = cellfun(@isnan, T.start_time, 'UniformOutput', false)
T.start_time(idx) = 'NaN'
idx = cellfun(@isnan, T.end_time, 'UniformOutput', false)
T.end_time(idx) = 'NaN'

Sign in to comment.

Categories

Tags

Asked:

on 24 May 2020

Commented:

on 24 May 2020

Community Treasure Hunt

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

Start Hunting!