How to convert continuous form of data into discrete steps form?

15 visualizzazioni (ultimi 30 giorni)
I looking for help to convert countinous form of data into discreate steps form.
Here is the example, please help me to ffind solution.
X = [ 1 3 5 8 10 15 20 25 30 34 38 40 45 50 55 60 65 69 70]
y =[ 1 3 5 4 6 5 8 7 6 7 6 7 6 7 6 7 5 7 0 1]
I want convert X variable in to steps multiple of 5 [0 5 10 15 20 25..] and coresspong values of y betwen these steps should be mean(y). Well I am looking for output in the following format.
x= [5,10,15...]
y=[3,5,5..].
I tried with find(x<5), which gave me indices for calculating the mean (y), but its too laborous method.
Thank you
  10 Commenti
Chetan Badgujar
Chetan Badgujar il 24 Ago 2020
@Cris, I am getting following error,
Error using groupsummary (line 103)
First argument must be a table or a timetable.
Error in Untitled3 (line 9)
Y = groupsummary(y,x,rg,@mean,"IncludedEdge","right")
Can you try on the data I shared on https://www.mathworks.com/matlabcentral/answers/583223-how-to-convert-continuous-variable-into-discrete-variables?s_tid=mlc_ans_email_view
Adam Danz
Adam Danz il 24 Ago 2020
You can flexibly compute the edges using
rg = 0:5:ceil(X/5)*5;

Accedi per commentare.

Risposta accettata

Cris LaPierre
Cris LaPierre il 26 Ago 2020
Try this (uses the data your supplied in the repost). Note that your data in X3 goes to 1.42, not 0.6. It's also unclear if you just want the summarized data, or the full 50,000 rows back. This gives 50,000 rows.
load ChetanBadgujar_DATA.mat
% Define edges of ranges
rg = 0:0.05:0.6;
% Identify groups (
newX3 = discretize(X3,rg,rg(2:end),"IncludedEdge","right");
% Find the max value in each range
Ymean = groupsummary(Y,X3,rg,@mean,"IncludeMissingGroups",false)
newY = discretize(X3,rg,Ymean)
  1 Commento
Cris LaPierre
Cris LaPierre il 26 Ago 2020
Modificato: Cris LaPierre il 26 Ago 2020
Older versions of MATLAB (before R2018b) require the inputs to groupsummary to be tables. This convert X3 and Y to a table.
load ChetanBadgujar_DATA.mat
data = table(X3,Y);
% Define edges of ranges
rg = 0:0.05:0.6;
% Identify groups (
newX3 = discretize(data.X3,rg,rg(2:end),"IncludedEdge","right");
% Find the max value in each range
Ymean = groupsummary(data,'X3',rg,@mean,'Y',"IncludeMissingGroups",false)
newY = discretize(data.X3,rg,Ymean.fun1_Y)
% Visualize result
plot(X3,Y,'x')
hold on
plot(newX3,newY,'wo')
hold off

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Data Type Conversion in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by