You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
Extract row elements corresponding to a particular column value and save as new matrix
2 views (last 30 days)
Show older comments
Sarah
on 14 Mar 2013
I have a Mx4 matrix with the following format:
a1 b1 c d1
a2 b2 c d2
a3 b3 c d3
a4 b4 c1 d4
a5 b5 c1 d5
and what i want to do is create new matrices corresponding to the different c values in the third column renaming this matrix matc.
Any help would be really appreciated Sarah
Answers (2)
Azzi Abdelmalek
on 14 Mar 2013
Edited: Azzi Abdelmalek
on 14 Mar 2013
b=A(:,3)
b(b==c)=yourvalue
A(:,3)=b
17 Comments
Sarah
on 14 Mar 2013
Thank you! the values of c are increasing but not monotonically, I would like to create a loop to extract these values corresponding to the different c values. Any ideas on how I might do that?
Sarah
on 14 Mar 2013
I do not want to replace them, I just want to extract the data corresponding to the different groups of c values for example create a matrix containing the data corresponding to c1 values and so on.
Sarah
on 14 Mar 2013
Also in the code you wrote there the last line just rewrites the variable b with the original matrix again?
Azzi Abdelmalek
on 14 Mar 2013
Edited: Azzi Abdelmalek
on 14 Mar 2013
If A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
What should be the result?
Azzi Abdelmalek
on 14 Mar 2013
Edited: Azzi Abdelmalek
on 14 Mar 2013
A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
assignin('base',sprintf('mat%d',c(k)),A(idx,:))
end
%Check the matrices mat2, mat4 and mat7
Sarah
on 14 Mar 2013
And because some of the c values are not integers is there a way to round the c value before assigning it to the variable name?
Azzi Abdelmalek
on 14 Mar 2013
But if you have three values of c: 1.8, 2 and 2.6 how will you round?
Azzi Abdelmalek
on 14 Mar 2013
Edited: Azzi Abdelmalek
on 14 Mar 2013
What I suggest is using cell array
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k}=A(idx,:)
end
then check
out{1}
out{2}
out{3}
Sarah
on 14 Mar 2013
I would round to the nearest integer eg 1.8->2 and so on.. Finally to save each matrix, I am unfamiliar with the assignin function. How would I save the individual matrices eg mat11 mat12 and so on..?
Sarah
on 14 Mar 2013
I have looked at the various matrices when I round the value c to the nearest integer, it is just saving the matrices within the loop that I am having some difficulty with now.
Azzi Abdelmalek
on 14 Mar 2013
Edited: Azzi Abdelmalek
on 14 Mar 2013
Did you check the cell array solution? You do not need to create such variables
Sarah
on 14 Mar 2013
You mean I do not need to save the matrices? I would like to save them individually as they are created within the loop.
Azzi Abdelmalek
on 14 Mar 2013
Check this :
clear out
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k,2}=A(idx,:)
out{k,1}=c(k)
end
out{1,1}, % is c1
out{1,2} % corresponding to c1
out{2,1}, % is c2
out{2,2} % corresponding to c2
and so on
Sarah
on 14 Mar 2013
the matrices are being created correctly with the original code, I only wish to now save each matrix that was created within the loop eg after the assignin('base',sprintf('mat%d',c(k)),A(idx,:)) line. I appreciate your help with this!
Azzi Abdelmalek
on 14 Mar 2013
Edited: Azzi Abdelmalek
on 14 Mar 2013
% Check this: for c=2.4 the variable will be mat2p4 instead of mat2.4
A= [ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2.4 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
s=num2str(c(k))
s=strrep(s,'.','p')
assignin('base',['mat' s],A(idx,:))
end
Check the result
mat2p4
mat4
mat7
Sarah
on 14 Mar 2013
So the matrix is sorted according to the third column so
A1=[4 2 2 3
2 3 4 6
4 8 7 9
5 2 7 1];
the answers should be
mat2=[4 2 2 3];
mat4=[2 3 4 6];
mat7=[4 8 7 9
5 2 9 1];
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)