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

13 visualizaciones (últimos 30 días)
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 comentarios
Chetan Badgujar
Chetan Badgujar el 24 de Ag. de 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 el 24 de Ag. de 2020
You can flexibly compute the edges using
rg = 0:5:ceil(X/5)*5;

Iniciar sesión para comentar.

Respuesta aceptada

Cris LaPierre
Cris LaPierre el 26 de Ag. de 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 comentario
Cris LaPierre
Cris LaPierre el 26 de Ag. de 2020
Editada: Cris LaPierre el 26 de Ag. de 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

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by