How can I delete some specific rows from a matrix?

2 views (last 30 days)
I have an easy question but somehow I am not being able to solve it.
Suppose I have a datetime matrix, A where
'2003-06-24'
'2003-07-10'
'2003-07-18'
'2003-07-26'
'2003-08-03'
'2003-08-11'
'2003-08-19'
'2003-08-27'
And I have another matrix B that contains every day/date from '2003-06-01' to '2003-09-01'.
Can anyone please tell me how can I filter out the rest of the dates from Matrix B so that only the dates from matrix A remain in B?
In another word, how can I make B just like A? (by removing all the unnecessary dates)
Any feedback from you will be greatly appreciated!

Accepted Answer

Steven Lord
Steven Lord on 13 Dec 2022
Do you have a character matrix or do you have a datetime matrix?
C = ['2003-06-24'
'2003-07-10'
'2003-07-18'
'2003-07-26'
'2003-08-03'
'2003-08-11'
'2003-08-19'
'2003-08-27']
C = 8×10 char array
'2003-06-24' '2003-07-10' '2003-07-18' '2003-07-26' '2003-08-03' '2003-08-11' '2003-08-19' '2003-08-27'
dt = datetime(C)
dt = 8×1 datetime array
24-Jun-2003 10-Jul-2003 18-Jul-2003 26-Jul-2003 03-Aug-2003 11-Aug-2003 19-Aug-2003 27-Aug-2003
I'll assume you're using the datetime matrix dt. Let's create B:
B = datetime('2003-06-01'):datetime('2003-09-01');
You can use the set functions like intersect, union, setxor, setdiff, etc. on datetime arrays.
BnotDt = setdiff(B, dt);
whos dt B BnotDt
Name Size Bytes Class Attributes B 1x93 744 datetime BnotDt 1x85 680 datetime dt 8x1 64 datetime
Element 24 of B is in dt:
B(24)
ans = datetime
24-Jun-2003
dt(1)
ans = datetime
24-Jun-2003
Element 24 of B is not in BnotDt. [It's not in a different location in BnotDt either, since BnotDt is sorted.]
BnotDt(23:25)
ans = 1×3 datetime array
23-Jun-2003 25-Jun-2003 26-Jun-2003
issorted(BnotDt)
ans = logical
1
  2 Comments
Steven Lord
Steven Lord on 14 Dec 2022
Use the set functions.
C = ['2003-06-24'
'2003-07-10'
'2003-07-18'
'2003-07-26'
'2003-08-03'
'2003-08-11'
'2003-08-19'
'2003-08-27'];
dt = datetime(C);
B = datetime('2003-06-01'):datetime('2003-09-01');
[isItAMember, whereIsIt] = ismember(dt, B)
isItAMember = 8×1 logical array
1 1 1 1 1 1 1 1
whereIsIt = 8×1
24 40 48 56 64 72 80 88

Sign in to comment.

More Answers (1)

Peter Perkins
Peter Perkins on 15 Dec 2022
Surely you don't just have a list of dates. Presumably you have data at each date. Use a timetable to store all that.
At that point, it becomes one line:
ttB = ttB(ttA.Time,:)

Categories

Find more on Data Type Conversion in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by