Combine rows of 2 Matrices based on a columns cell value

1 visualizzazione (ultimi 30 giorni)
I have two matrices. The first matrix "A" has 2 columns and 425 rows of data. Matrix "B" has 10 columns and 468 rows of data.
I need to assign rows 5 through 9 of Matrix B into rows 3 through 7 of Matrix A based on matching values in column 2 of B and column 10 in A (2 and 10 are indexes). For example:
Matrix A:
711875 1
711883 32
711884 22
712548 43
Matrix B:
1950 11 22 5 -1.5 46 -1.9 21 1 1
1951 3 11 5 -2.0 42 -1.6 33 1 2
1958 2 12 8 -2.0 34 -2.6 16 1 3
1960 2 29 17 -1.9 41 -2.2 25 1 4
1962 1 7 6 -1.6 34 -1.7 18 1 5
1962 12 8 6 -2.1 34 -2.1 16 1 6
1963 12 14 8 -1.6 37 -1.8 17 2 7
1965 3 3 6 -1.6 43 -1.5 31 2 8
1966 1 24 8 -1.6 35 -2.1 16 3 9
1967 2 21 5 -1.5 41 -2.1 22 3 10
The output should then be:
[711875, 1, 1950, 11, 22, 5, -1.5, 46, -1.9, 21, 1, 1]
where the " , " denotes columns. Therefore the first two columns would be from Matrix A while the last 10 columns would be from Matrix B. So 12 columns in total.

Risposta accettata

per isakson
per isakson il 28 Set 2016
Modificato: per isakson il 29 Set 2016
Try the code below. (Note that I have modified the example somewhat. All values of A(:,2) should be members of B(:,10) ???)
A = [
711875 1
711883 4
711884 7
712548 10 ];
B = [
1950 11 22 5 -1.5 46 -1.9 21 1 1
1951 3 11 5 -2.0 42 -1.6 33 1 2
1958 2 12 8 -2.0 34 -2.6 16 1 3
1960 2 29 17 -1.9 41 -2.2 25 1 4
1962 1 7 6 -1.6 34 -1.7 18 1 5
1962 12 8 6 -2.1 34 -2.1 16 1 6
1963 12 14 8 -1.6 37 -1.8 17 2 7
1965 3 3 6 -1.6 43 -1.5 31 2 8
1966 1 24 8 -1.6 35 -2.1 16 3 9
1967 2 21 5 -1.5 41 -2.1 22 3 10 ];
C = cat( 2, A, B( A(:,2), : ) );
[~,ixb] = ismember( A(:,2), B(:,10) );
D = cat( 2, A, B( ixb, : ) );
all( C(:)==D(:) )
If neither C nor D is what you want, please review your question.

Più risposte (0)

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by