# How to choose data with conditions?

9 views (last 30 days)
Mario on 17 Aug 2022
Commented: Mario on 17 Aug 2022
Hello!! I'm new in programming world and I’m trying to select the data of a column with some condition; I need to select only when the data is increasing in the column, and when is decreasing in the same column. I did it in excel with: =IF((BA3-BA2)<0,BA2+(BA3-BA2)) --- for decreasing, and =IF((BA3-BA2)>0,BA2+(BA3-BA2)) for increasing. But I’m not able to do it in mat lab with the entire column.
If somebody can help me I really appreciative!
data = 213×1
109.4632 109.3436 108.9267 108.2206 107.2488 106.1058 104.9447 103.8366 102.7987 101.7733

Sulaymon Eshkabilov on 17 Aug 2022
This can be done a few different ways. MATLAB has several very efficient built-in functions to compute any value change dynamics. In your exercise, you would need to take the following steps:
Step 1. Data import
Step 2. Compute the data chaneg dynamics
dD = diff(D);
Step 3. Find out if the data is increasing or decreasing order
IDX1 = find(dD>0); % Locate Indices for increase
IDX2 = find(dD<0); % Locate Indices for decrease
Step 4. Do something ...
Mario on 17 Aug 2022
Thanks so much, it works. It is possible to keep help me it would be great. Now that I located the increasing and decreasing data, I need to sum all the increasing data and all the decreasing data. I'm not able to do it when I sum the location (IDX1 or IDX2).
Also, I was trying to identify in the plot (with some symbols) the increasing and decreasing data, without successful results. How can I do it??
Thanks again, have a nice day
Mario N.L.

Cris LaPierre on 17 Aug 2022
Create a logical array and use that to select the values you want. See Ch 11 of MATLAB Onramp.
A simple example
A = [109.4632
109.3436
108.9267
108.2206
107.2488];
% logical array of locations where sequential rows are increasing or
% decreasing (will be one row shorter than A)
d = diff(A);
ind = d~=0;
% Create a new vector based on your formula: next value is current value
% plus difference of next row and current row
B = A([ind;false]) + d(ind)
B = 4×1
109.3436 108.9267 108.2206 107.2488