Merging two matrices where they have the same data in 1st column
3 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Azzi Abdelmalek
2016-8-13
编辑:Azzi Abdelmalek
2016-8-13
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,:)
0 个评论
更多回答(1 个)
Star Strider
2016-8-13
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!