MATLAB Answers

BdS
0

Find the earliest common date and indicator of two date vectors.

BdS
さんによって質問されました 2019 年 5 月 17 日
最新アクティビティ Rik
さんによって コメントされました 2019 年 5 月 17 日
Hi,
I have got two date vectors: a=[28.02.2019;01.03.2019;04.03.2019;...] and b=[01.03.2019;04.03.2019;...]
How to find the earliest common date (=01.03.2019) and its vector index indicator (for date vector a is 2 and b is 1).
Thank you in advance for any suggestions.

  2 件のコメント

Guillaume
2019 年 5 月 17 日
"I have got two date vectors"
Please use valid matlab syntax for your examples.
In matlab a date vector is a 1x3 or 1x6 vector containing only 1 date.
a = [28.02.2019; 01.03.2019; 04.03.2019];
is not valid matlab syntax. So what do you have?
BdS
2019 年 5 月 17 日
Thank you for your code suggestion.
I have got a 55x1 datetime date vector which is vector A and a 56x1 datetime date vector which is vector B.
The date format is 06-Mar-2019
----
It does not have to be that the time vector A is always smaller than Vector B. It can change. It can also be that the first date of time vector A begins later than in date vector B. It must be flexible.

サインイン to comment.

2 件の回答

Guillaume
回答者: Guillaume
2019 年 5 月 17 日
 採用された回答

intersect will give you all the dates common to a and b. By default, it also sorts them, so the first of these will be the earliest one, so:
[commondates, whereina, whereinb] = intersect(a, b);
firstcommon = commondates(1);
whereina = whereina(1);
whereinb = whereinb(1);

  0 件のコメント

サインイン to comment.


Rik
回答者: Rik
2019 年 5 月 17 日
編集済み: Rik
2019 年 5 月 17 日

This answer assumes you have your dates in a datetime format. If you don't it should be relatively easy to convert to it. If your release is too old to support it, please comment with what release you're using.
a=datetime([2019 2019 2019],[2 3 3],[28 1 4]);
b=datetime([2019 2019 2019],[3 3 5],[1 4 1]);
[common_dates,ind_in_a]=ismember(a,b);
common_dates=a(common_dates);
[first,a_min_ind]=min(common_dates);
a_ind=find(ind_in_a==a_min_ind);
b_ind=find(b==first);

  4 件のコメント

Rik
2019 年 5 月 17 日
For what cases doesn't this work? This code does not assume equal length of the vector. It works for most shapes that have no zero-length dimension.
BdS
2019 年 5 月 17 日
With your code I get for a the indicator 1 and for b 1 as well.
I should actually get for a indicator 2 and b indicator 1. Both indicates 01-Mar-2019 in vector a and b.
The code should also work in cases when b begins with an earlier date.
Rik
2019 年 5 月 17 日
I edited my answer. It works now, but it has become messy, so I would suggest you keep using Guillaume's solution.

サインイン to comment.



Translated by