How to get average/max/min table of many tables
37 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
QuanCCC
am 22 Dez. 2018
Kommentiert: Peter Perkins
am 25 Jan. 2019
Hi,
I have a .mat file including many tables with the same size/ thing: var names are the same, row names are the same, but the values in each cell are different (because they are for different scenarios). So is there a way to get a new table with the average cell values for all the tables? And MaxTable, MinTable which has the max/min values in each cell?
Thank you.
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 24 Dez. 2018
Have you tried the mean() and max() functions to see if they work with a table. I haven't though they probably won't since tables can contain non-numeric data.
The other option is to just extract each column into an array, and then you can use whatever function you want. Like for 3 tables:
col11 = table1{:, 1};
col21 = table2{:, 1};
col31 = table3{:, 1};
meanCol = mean([col11, col21, col31]);
maxCol = max([col11, col21, col31]);
If you have a lot of them, you can put them into a loop where you read each table from a file, and extract each column one at a time into a 2-D array and then do the math. See The FAQ
Attach your data in .mat files with the paper clip icon if you need more help.
Weitere Antworten (1)
Peter Perkins
am 23 Jan. 2019
Most likely, the simplest solution is to vertcat all of your tables, adding an ID variable (a "grouping variable") to indicate which original table each row came from. Then use varfun, splitapply, groupsummary (depending on what release tou have) to compute stats on the variables of interest for each "group" of data. For example
>> t1 = array2table(rand(5,2))
t1 =
5×2 table
Var1 Var2
_______ _______
0.81472 0.09754
0.90579 0.2785
0.12699 0.54688
0.91338 0.95751
0.63236 0.96489
>> t2 = array2table(rand(3,2))
t2 =
3×2 table
Var1 Var2
_______ _______
0.15761 0.48538
0.97059 0.80028
0.95717 0.14189
>> t = [t1; t2];
>> t.ID = [1;1;1;1;1;2;2;2]
t =
8×3 table
Var1 Var2 ID
_______ _______ __
0.81472 0.09754 1
0.90579 0.2785 1
0.12699 0.54688 1
0.91338 0.95751 1
0.63236 0.96489 1
0.15761 0.48538 2
0.97059 0.80028 2
0.95717 0.14189 2
>> varfun(@mean,t,'GroupingVariable','ID')
ans =
2×4 table
ID GroupCount mean_Var1 mean_Var2
__ __________ _________ _________
1 5 0.67865 0.56906
2 3 0.69512 0.47585
2 Kommentare
Peter Perkins
am 25 Jan. 2019
If you have more than a handfull of variables, the extra memory will be a small percentage. If you use a categorical variable, it will adjust its internal representation to uint8, uint16, etc. depending on how many "groups" you have, i.e. how many mat files.
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!