Merging two matrices where they have the same data in 1st column
    4 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Cameron Spooner
 am 13 Aug. 2016
  
    
    
    
    
    Beantwortet: Star Strider
      
      
 am 13 Aug. 2016
            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 Kommentare
Akzeptierte Antwort
  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,:)
0 Kommentare
Weitere Antworten (1)
  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
0 Kommentare
Siehe auch
Kategorien
				Mehr zu Dates and Time 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!


