Effacer les filtres
Effacer les filtres

How to extend the matrix size by splitting up a column in two columns

1 vue (au cours des 30 derniers jours)
Paul
Paul le 20 Nov 2012
There is a Matrix A, which can have variable size, for example (5x4):
A =
|10 2 0.0 6|
|10 2 18.0 6|
|10 2 1800.0 6|
|10 2 1810.0 6|
|10 2 2215.0 6|
Now there's a specific column (3rd column), which I wish to be separated in two different columns, but next to each other, like this:
A =
|10 2 0 0 6|
|10 2 0 18 6|
|10 2 18 00 6|
|10 2 18 10 6|
|10 2 22 15 6|
Such a column can also appear in the first or last column. Then it is separated in the same way. The matrix size then gets (5x5) in this case.
The numbers in the specific column are always non-negative integers and can only contain numbers between 0000 - 9999. the first two digits belong to the one column, the next two digits belong to the next column.

Réponse acceptée

José-Luis
José-Luis le 20 Nov 2012
Modifié(e) : José-Luis le 20 Nov 2012
A= [10 2 0.0 6;...
10 2 18.0 6;...
10 2 1800.0 6;...
10 2 1810.0 6;...
10 2 2215.0 6];
Str = mat2cell(reshape(sprintf('%04i',A(:,3)),4,[])',ones(size(A,1),1),[2 2]);
your_vals = cellfun(@(x) str2double(x),Str);
A(:,3) = [];
A = [A(:,1:2) your_vals A(:,3:end)];
  2 commentaires
Paul
Paul le 20 Nov 2012
Wow, impressing! Thank you!
José-Luis
José-Luis le 20 Nov 2012
My pleasure!

Connectez-vous pour commenter.

Plus de réponses (1)

Jos (10584)
Jos (10584) le 20 Nov 2012
A = [1 1 1800 1 ; 2 2 1815 2 ; 3 3 6512 3]
C = A(:,3)
c2 = rem(C,100)
c1 = (C - c2)/100
output = [A(:,[1 2]) c1 c2 A(:,4)]

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by