Filter löschen
Filter löschen

Merging two matrices where they have the same data in 1st column

3 Ansichten (letzte 30 Tage)
I have 2 cell matrices that are set up as below;
A
01/01/16, 21, 32, 43
03/01/16, 22, 33, 44
05/01/16, 23, 34, 45
B
01/01/16, 0, 0, 0
02/01/16, 0, 0, 0
03/01/16, 0, 0, 0
04/01/16, 0, 0, 0
05/01/16, 0, 0, 0
And I would like to merge them such that if the two matrices have a date in common then the corresponding row from matrix A is copied to matrix B. Whilst dates not in common are left with 0 values to make an output C;
C
01/01/16, 21, 32, 43
02/01/16, 0, 0, 0
03/01/16, 22, 33, 44
04/01/16, 0, 0, 0
05/01/16, 23, 34, 45
I'm not very sure how to go about doing this so any help would be greatly appreciated.

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 13 Aug. 2016
Bearbeitet: Azzi Abdelmalek am 13 Aug. 2016
A={'01/01/16', 21, 32, 43
'03/01/16', 22, 33, 44
'05/01/16', 23, 34, 45}
B={'01/01/16', 0, 0, 0
'02/01/16', 0, 0, 0
'03/01/16', 0, 0, 0
'04/01/16', 0, 0, 0
'05/01/16', 0, 0, 0}
C=B
idx1=ismember(B(:,1),A(:,1))
idx=ismember(A(:,1),B(:,1))
C(idx1,:)=A(idx,:)

Weitere Antworten (1)

Star Strider
Star Strider am 13 Aug. 2016
This works:
A = {'01/01/16', 21, 32, 43
'03/01/16', 22, 33, 44
'05/01/16', 23, 34, 45};
B = {'01/01/16', 0, 0, 0
'02/01/16,' 0, 0, 0
'03/01/16,' 0, 0, 0
'04/01/16', 0, 0, 0
'05/01/16', 0, 0, 0};
Adate = cellfun(@(x)datenum(x, 'mm/dd/yy'), A(:,1));
Bdate = cellfun(@(x)datenum(x, 'mm/dd/yy'), B(:,1));
Lidx = ismember(Bdate, Adate);
C = B;
C(Lidx,:) = A

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by