Sort a table in ascending order
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Shahar ben ezra
le 12 Nov 2020
Commenté : Shahar ben ezra
le 12 Nov 2020
Hi
How can I sort a table-type array in ascending order
For example
First mode
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/411803/image.png)
To:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/411808/image.png)
TNX :)
1 commentaire
Stephen23
le 12 Nov 2020
@Shahar ben ezra: you should transpose the way your table is arranged, otherwise it will be a nightmare to work with (both in Excel and MATLAB).
Réponse acceptée
Steve Eddins
le 12 Nov 2020
Modifié(e) : Steve Eddins
le 12 Nov 2020
The answer would be relatively straightforward, as well as much more efficient, if you would orient your table the other way. With data such as yours, table is really designed to be used this way:
>> Name = ["roni" ; "tim" ; "jon" ; "lie" ; "kim"];
>> TestScore = [90 ; 45 ; 67 ; 84 ; 32];
>> T = table(Name,TestScore)
T =
5×2 table
Name TestScore
______ _________
"roni" 90
"tim" 45
"jon" 67
"lie" 84
"kim" 32
Then you could sort the table using sortrows:
>> T2 = sortrows(T,"TestScore")
T2 =
5×2 table
Name TestScore
______ _________
"kim" 32
"tim" 45
"jon" 67
"lie" 84
"roni" 90
5 commentaires
Steve Eddins
le 12 Nov 2020
The convention of storing tabular data column-wise is almost universal today. Excel itself follows it. A couple of months ago, there were some articles in the press about a UK coronavirus dataset that was corrupted because the data was stored row-wise in an Excel spreadsheet.
You can still get it done with your spreadsheet files, though. It just requires a few extra steps. One way is to read the Excel file into a cell array and then manipulate the cell array to get the desired MATLAB table, like this:
>> C = readcell('wrong-way.xlsx')
C =
2×6 cell array
Columns 1 through 5
{'Name' } {'roni'} {'tim'} {'jon'} {'lie'}
{'Test score'} {[ 90]} {[ 45]} {[ 67]} {[ 84]}
Column 6
{'kim'}
{[ 32]}
>> Name = string(C(1,2:end))'
Name =
5×1 string array
"roni"
"tim"
"jon"
"lie"
"kim"
>> TestScore = cell2mat(C(2,2:end))'
TestScore =
90
45
67
84
32
>> T = table(Name,TestScore)
T =
5×2 table
Name TestScore
______ _________
"roni" 90
"tim" 45
"jon" 67
"lie" 84
"kim" 32
>> T2 = sortrows(T,"TestScore")
T2 =
5×2 table
Name TestScore
______ _________
"kim" 32
"tim" 45
"jon" 67
"lie" 84
"roni" 90
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Spreadsheets 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!