MATLAB Answers

how to find nearest date and its corresponding value !

55 views (last 30 days)
pankaj mali
pankaj mali on 16 Oct 2019
Edited: 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

Turlough Hughes
Turlough Hughes on 16 Oct 2019
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.
pruth
pruth on 17 Oct 2019
what if i just want to round the data to nearest minute !! How can we do it ?

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 16 Oct 2019
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

pankaj mali
pankaj mali on 17 Oct 2019
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
Andrei Bobrov
Andrei Bobrov on 17 Oct 2019
[~,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.

More Answers (0)


Translated by