Find closest value for each row in timetable

6 views (last 30 days)
I have a timetable with 3 columns.
I would like to use the first column (Var1) as reference to select the closest value in the 2 other columns, resulting in a timetable with just 1 column (i.e. the value closest to Var1).
If both values in the 2 colums are NaN, then the resulting value can be left out.
I tried using a for loop but I'm not sure this is the best way forward.
Does anyone has a suggestion how to do this?
Thanks a lot

Accepted Answer

Star Strider
Star Strider on 9 Jan 2023
I am defining ‘closest’ as the minimum absolute difference between ‘Var1’ and the last two variables.
(My attempt at a more direct approach for the creation of ‘Var4’ failed, so I went with the loop, that worked.)
Try something like this —
LD = open(websave('nHS_TS','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1257052/nHS_TS.mat'));
nHs_TS = LD.nHs_TS
nHs_TS = 2033×3 timetable
Time Var1 Hs_C1_TS Hs_C2_TS ___________________ ______ ________ ________ 2021-10-08 15:00:00 1.8849 NaN NaN 2021-10-08 15:15:00 1.8849 NaN 0.3493 2021-10-08 15:30:00 2.1875 NaN 0.31827 2021-10-08 15:45:00 2.2015 NaN NaN 2021-10-08 16:00:00 2.3331 NaN 0.30235 2021-10-08 16:15:00 2.3331 NaN 0.32572 2021-10-08 16:30:00 2.4653 NaN NaN 2021-10-08 16:45:00 2.377 NaN NaN 2021-10-08 17:00:00 2.4221 NaN NaN 2021-10-08 17:15:00 2.4221 NaN 0.37422 2021-10-08 17:30:00 2.4087 NaN 0.38577 2021-10-08 17:45:00 2.2971 NaN 0.47792 2021-10-08 18:00:00 2.0863 NaN 0.50083 2021-10-08 18:15:00 2.0863 NaN 0.46436 2021-10-08 18:30:00 1.8908 NaN 0.46218 2021-10-08 18:45:00 1.6217 0.37528 0.47233
[~,idx] = min(abs(nHs_TS{:,1}-[nHs_TS{:,[2 3]}]),[],2,'omitnan'); % Minimum Absolute Difference
Extract = nHs_TS{:,[2 3]};
for k = 1:numel(idx)
Var4(k,:) = Extract(k,idx(k));
end
nHs_TS.NewVar= Var4
nHs_TS = 2033×4 timetable
Time Var1 Hs_C1_TS Hs_C2_TS NewVar ___________________ ______ ________ ________ _______ 2021-10-08 15:00:00 1.8849 NaN NaN NaN 2021-10-08 15:15:00 1.8849 NaN 0.3493 0.3493 2021-10-08 15:30:00 2.1875 NaN 0.31827 0.31827 2021-10-08 15:45:00 2.2015 NaN NaN NaN 2021-10-08 16:00:00 2.3331 NaN 0.30235 0.30235 2021-10-08 16:15:00 2.3331 NaN 0.32572 0.32572 2021-10-08 16:30:00 2.4653 NaN NaN NaN 2021-10-08 16:45:00 2.377 NaN NaN NaN 2021-10-08 17:00:00 2.4221 NaN NaN NaN 2021-10-08 17:15:00 2.4221 NaN 0.37422 0.37422 2021-10-08 17:30:00 2.4087 NaN 0.38577 0.38577 2021-10-08 17:45:00 2.2971 NaN 0.47792 0.47792 2021-10-08 18:00:00 2.0863 NaN 0.50083 0.50083 2021-10-08 18:15:00 2.0863 NaN 0.46436 0.46436 2021-10-08 18:30:00 1.8908 NaN 0.46218 0.46218 2021-10-08 18:45:00 1.6217 0.37528 0.47233 0.47233
.

More Answers (0)

Tags

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!