MATLAB Answers

0

how to find nearest date and its corresponding value !

Asked by pankaj mali on 16 Oct 2019
Latest activity Edited by Andrei Bobrov
on 17 Oct 2019
Hi,
I have one date/time array(A). and another mat file (AOD) which has first column of date/time and second column has values.
I need find date/time from (AOD) which is nearest to date/time of (A) and the correspoding values from AOD to that date.
and if it find two dates near to date/time from A(for eg two minutes earlier and two minutes later ). it should take earilier datetime !
In my result matrix I should have first column of date/time from file (A) and second column should be values from AOD which were measured at time somewhere near to date/time first colum !
i hope you understand my question. I am adding those two files here.
pardon my english !

  2 Comments

Do you want to round the data to the nearest minute in that case?
If you take times in seconds there are no cases where a time in A is midway between two times in AOD.
what if i just want to round the data to nearest minute !! How can we do it ?

Sign in to comment.

1 Answer

Answer by Andrei Bobrov
on 16 Oct 2019
 Accepted Answer

load('date.mat');
load('AOD.mat');
d = datetime(A,'ConvertFrom','datenum');
[lo,i] = ismembertol(AOD_440(:,1),A,1,'DataScale',1/8/60);
TT_out = array2timetable(AOD_440(lo,2),'RowTimes',d(i(lo)),'VariableNames',{'data'});

  3 Comments

sir, there is one problem in your solution, in the TT_out what i want is all the dates from A and the values from AOD(:,2) which were measure at closest time from A !
I should get the matrix of size
697*2
[~,i] = min(abs(AOD_440(:,1) - A(:)));
d = datetime(A,'ConvertFrom','datenum');
TT_out = array2timetable(AOD_440(i,2),'RowTimes',d,'VariableNames',{'data'});
or
T = timetable(AOD_440(:,2),'RowTimes',datetime(AOD_440(:,1),'ConvertFrom','datenum'));
d = datetime(A,'ConvertFrom','datenum');
TT_out = retime(T,d,'nearest');

Sign in to comment.