Sorting data from table

10 vues (au cours des 30 derniers jours)
Jiri Soucek
Jiri Soucek le 15 Oct 2018
Modifié(e) : Andrei Bobrov le 18 Oct 2018
Hi, I have a table T (8766x4) columns are - month, day, year and Flow rate (that is 24 years of data - 8766 days). I need to sort flow rate for each year separately and descend flow rate for each year and then plot.
P.S. I am afraid this approach with tables is wrong

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 15 Oct 2018
Modifié(e) : Andrei Bobrov le 18 Oct 2018
T - your table with variables: month, day, year and prutok.
ii = findgroups(T.year);
Prutok = accumarray(ii,T.prutok,[],@(x){sort(x,'descend')});
for jj = 1:numel(Prutok), plot(Prutok{jj}); hold on; end
other variant
Days1 = day(datetime(T{:,{'year','month','day'}}),'dayofyear');
c = findgroups(T.year);
Anew = sort(accumarray([Days1,c],T.prutok,[],[],nan),'descend');
plot(Anew)
(added)
and the best variant by Guillaume and Peter
hold on
varfun(@(x)plot(sort(x,'descend')),T,'GroupingVariable','year','InputVariable','prutok');
hold off
  2 commentaires
Guillaume
Guillaume le 15 Oct 2018
Assuming that's what is wanted, this is probably simpler:
varfun(@(col) plot(sort(col, 'descend'), T, 'GroupingVariables', 'year', 'InputVariables', 'prutok')
Jiri Soucek
Jiri Soucek le 16 Oct 2018
Andrei Bobrov Thanks a lot :)

Connectez-vous pour commenter.

Plus de réponses (1)

Guillaume
Guillaume le 15 Oct 2018
Simple:
sortedtable = sortrows(yourtable, 'year', 'flowrate', {'ascend', 'descend'}) %sort ascending by year, and for identical year, descending by flow rate
where 'year' and 'flowrate' are the variable names of your year and flow rate column respectively.
A table is the right approach.
  2 commentaires
Jiri Soucek
Jiri Soucek le 15 Oct 2018
:( It doesnt work (it says that variable 'year' its class is 'double' and more if it would/will work i need to plot it to get this
I allready manage to plot the values by this method:
r=1994; while r<=2017
r=r+1;
Q_rocni2=T.prutok(T.year==r);
Q_rocni2_sort=sort(Q_rocni2,'descend'); %seřazen průtok za 1 rok
plot(Q_rocni2_sort,'b'); hold on
but I would like to have values in table/matrix, where rows are flowrates and one column is one year for example. Because I nee to work with values furthemore
Thanks
Peter Perkins
Peter Perkins le 17 Oct 2018
I think something like Guillaume's is the right way to go: sort the data by time, then make a plot for each year. From the plot you made, it seems like your original description is not accurate -- it looks to me like you want to plot flow rate by time, overlaying each year.
So: sortrows using year/month/day, then use varfun to make the plots (with hold on/of before and after).

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by