I have a cell array that looks like:
a={apples} {1}
{orange} {2}
{apples} {3}
{Pear} {4}
{apples} {5}
I want to get like items together in their own matrix like:
a1= {apples} {1}
{apples} {3}
{apples} {5}
a2= {orange} {2}
a3= {pear} {4}
Thank you!

 Akzeptierte Antwort

Matt J
Matt J am 12 Jul. 2021
Bearbeitet: Matt J am 12 Jul. 2021

0 Stimmen

One way:
a=sortrows(a,1)

6 Kommentare

Qiana Curcuru
Qiana Curcuru am 13 Jul. 2021
thanks that's almost what i want.
After they are sorted, i want to set each like row to its own variable like i have above.
Matt J
Matt J am 13 Jul. 2021
Bearbeitet: Matt J am 13 Jul. 2021
That would be a bad idea:
The better thing to do would be to organize the subsets of a as fields of a struct:
a={'apples',1;...
'orange',2;...
'apples',3;...
'Pear',4;...
'apples',5};
[G,fields]=findgroups(a(:,1));
X=splitapply(@(x){x.'}, a(:,2),G);
Sa=cell2struct(X,fields)
Sa = struct with fields:
Pear: {[4]} apples: {[1] [3] [5]} orange: {[2]}
Qiana Curcuru
Qiana Curcuru am 19 Jul. 2021
awesome thanks! so then how would you reference items in the struct?
Like if i wanted to know what objects are under 'apples' what is the command for that?
Sa.apples
Qiana Curcuru
Qiana Curcuru am 19 Jul. 2021
ah okay, but what if i dont know what the categories are since i am writing them with a for loop. is there a way to refernce them using indices?
Matt J
Matt J am 19 Jul. 2021
Bearbeitet: Matt J am 19 Jul. 2021
fields=fieldnames(Sa);
for i=1:numel(fields)
Sa.(fields{i})
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Version

R2018b

Tags

Gefragt:

am 12 Jul. 2021

Bearbeitet:

am 19 Jul. 2021

Community Treasure Hunt

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

Start Hunting!

Translated by