Extracting data from a 'for' loop

5 views (last 30 days)
I have the following input file 'Test_14-Dec-2018.xls' attached
This is my code:
clc;
clear;
dataset = xlsread('Test_14-Dec-2018');
A = dataset(:,1:8);
B = A(A(:,1)==10,:); %for a=10s
k=1;
C=cell(1,4);
for p = 1:4
j=p*9;
i=j-8;
C{k} = B(i:j,:);
d=cell2mat(C);
x = d(:,2);
k=k+1;
end
Basically what the code does is extract that data into the matlab workspace and selects the data only when the first column has '10' data.
In the for loop, every 9 rows are selected and assigned a cell so that I have 9x8 in each 4 cells.
Cell2mat converts those cells into one matrix of 9x32. I am able to extract the second column from that.
Now, I want the data from every 8th column i.e. d(:,8), d(:,16), d(:,24), d(:,32) in a for loop but I am unable to do that.
After that I should be able to plot 'x' with each of those data from each column.
Any kind of help will be appreciated.
  10 Comments
Yoham Parelkar
Yoham Parelkar on 18 Dec 2018
Thanks Bob for fixing the error.
Now I want to plot multiple values of 'y' with 'x'.
plot(x,y(:,m))
Adding the above line only gives me comparison of x with obly one value of 'y'. How should I edit the code in such a way that all values of 'y' gets plotted with 'x'?
Bob Thompson
Bob Thompson on 18 Dec 2018
You need to set 'hold on'. That will allow you to plot multiple lines on the same figure. You can do this before the loop.

Sign in to comment.

Accepted Answer

Yoham Parelkar
Yoham Parelkar on 18 Dec 2018
Thank you Bob and Madhan Ravi for your help and inputs!
I was able to successfuly plot and further add new commands and complete the script.
This is correct code:
clc;
clear;
dataset = xlsread('Test_14-Dec-2018');
A = dataset(:,1:8);
B = A(A(:,1)==10,:); %for a=10s
k=1;
C=cell(1,4);
for p = 1:4
j=p*9;
i=j-8;
C{k} = B(i:j,:);
d=cell2mat(C);
x = d(:,2);
k=k+1;
end
for m = 1:floor(size(d,2)/8);
y(:,m) = d(:,m*8);
hold on
plot(x,y(:,m))
end

More Answers (1)

madhan ravi
madhan ravi on 17 Dec 2018
Edited: madhan ravi on 17 Dec 2018
Replying to your latter comment :
y=cell(1,numel(1:8:32));
for l=1:8:32
y{l}=d(:,l);
end
celldisp(y) % [y{:}] to convert it to double from cell
y=d(:,[1:8:32])
  3 Comments
madhan ravi
madhan ravi on 17 Dec 2018
Anytime :) , if my code worked make sure to accept the answer else let know what needs to be done after you analyse(take your time) let me take a short nap by then ;-).
Yoham Parelkar
Yoham Parelkar on 18 Dec 2018
Well actually, your code only extracts every 8th column and saves those 4 columns into a new variable which is nothing but the same as of 'd' variable.
I don't want to make a new dataset of those values but only extract those columns and plot it with 'x'

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!