How to get rows with all similar columns and adjust matrix with shorter length to that of longer length

Hello,
I have two example arrays here (Time vectors in format [Y M D H M S]) as follows (my original data has 73200 sample points)
A = [2023 6 29 7 8 9; 2023 6 29 7 8 10; 2023 6 29 7 8 11; 2023 6 29 7 8 12; 2023 6 29 7 8 18; 2023 6 29 7 8 19; 2023 6 29 7 8 20; 2023 6 29 7 8 21; 2023 6 29 7 8 22; 2023 6 29 7 8 23; 2023 6 29 7 8 24]
B = [2023 6 29 7 8 22.5; 2023 6 29 7 8 23; 2023 6 29 7 8 24]
And a data vector for matrix B:
B_data = [12 21 21] (To note, A matrix also has a data vector but it is not the part of the problem)
What i am planning to do is to is to allign both the vectors to get same length i.e. to fill in the missing time data in B and to make it same length as A.
Here was my effort: I tried to find the rows with common columns and for these rows i kept the origianl data of B, and for the missing rows i added those from A.
I used (ismember(B,A,rows)) to get the index.
What is confusing to me is that when i use (ismember(B,A,rows)) and (ismember(A,B,rows)), i am not getting the same number of elements.
Because of this the end result i want is not correct. Can someon help me out here. I thank you in advance.

2 Comments

"Here was my effort: I tried to find the rows with common columns and for these rows i kept the origianl data of B, and for the missing rows i added those from A."
"Because of this the end result i want is not correct."
You are assuming that A and B will exactly have size(A,1)-size(B,1) different rows.
What if A and B have less than size(A,1)-size(B,1) different rows? or more than that? What should be the output then?
Given the data, what is the expected result? And what is the logic/criteria behind achieveing that result?
Edit - Changed the incorrect numel(x) to size(x,1) for number of rows
Hi,
Let me add some more information, There are no repeated rows in A , and the same goes for B. This eliminates the different rows being more than numel(A) - numel (B).
Also i am not assuming different rows = numel(A) - numel (B). This can be seen in the example as well. In th elast column, A has a value of 22 and B 22.5, and because of this the number of different rows = 9 ~= numel(A) - numel(B).
In this case i would still keep with A. For any row of A which is not in B shall be replaced with that of A, and any extra row of B which is not in A shall be deleted in order to make it same length as A.
i hope this clears up the problem even more.

Sign in to comment.

Answers (1)

If understood correctly or presuming it :), is this what you are try to get:
A = [2023 6 29 7 8 9;
2023 6 29 7 8 10;
2023 6 29 7 8 11;
2023 6 29 7 8 12;
2023 6 29 7 8 18;
2023 6 29 7 8 19;
2023 6 29 7 8 20;
2023 6 29 7 8 21;
2023 6 29 7 8 22;
2023 6 29 7 8 23;
2023 6 29 7 8 24]
A = 11×6
2023 6 29 7 8 9 2023 6 29 7 8 10 2023 6 29 7 8 11 2023 6 29 7 8 12 2023 6 29 7 8 18 2023 6 29 7 8 19 2023 6 29 7 8 20 2023 6 29 7 8 21 2023 6 29 7 8 22 2023 6 29 7 8 23
B = [2023 6 29 7 8 22.5;
2023 6 29 7 8 23;
2023 6 29 7 8 24]
B = 3×6
1.0e+03 * 2.0230 0.0060 0.0290 0.0070 0.0080 0.0225 2.0230 0.0060 0.0290 0.0070 0.0080 0.0230 2.0230 0.0060 0.0290 0.0070 0.0080 0.0240
ID_miss=ismember(A,B,'rows') % This is what finds out what rows are missing in B
ID_miss = 11×1 logical array
0 0 0 0 0 0 0 0 0 1 1
IDX = find(ID_miss==0);
B(IDX, :)=A(IDX,:) % Fills up with the data in A like equating B to A
B = 9×6
2023 6 29 7 8 9 2023 6 29 7 8 10 2023 6 29 7 8 11 2023 6 29 7 8 12 2023 6 29 7 8 18 2023 6 29 7 8 19 2023 6 29 7 8 20 2023 6 29 7 8 21 2023 6 29 7 8 22

1 Comment

The size of the final output should be the same as the size of A.
"What i am planning to do is to is to allign both the vectors to get same length i.e. to fill in the missing time data in B and to make it same length as A."

Sign in to comment.

Categories

Find more on Signal Processing Toolbox in Help Center and File Exchange

Products

Release

R2021a

Asked:

on 12 Oct 2023

Edited:

on 12 Oct 2023

Community Treasure Hunt

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

Start Hunting!