MATLAB Answers

0

classify data from csv fil

Asked by Khadija Al Jabri on 11 May 2018
Latest activity Commented on by Star Strider
on 11 May 2018
hello everyone
I want to read data from csv file and classify these data. my csv look like this:
0
0.139999945
0.209999918
12.86283386
0
-0.649996554
-2.609774285
-114.4151
...
its [154*1][row*col], I want to classify these data as
  • (if data = 0 then write 0 in the second column)
  • (if 0<data<=45 then print 1)
  • (if 45<data<=90 then print 2)
  • (if 0>data>=-45 then print 3)
  • (if -45>data>=-90 then print 4)
I don't know what should I write in the condition statement! the following is my attempt but it doesn't give the desired output.
M = csvread('imu.csv')
[rows cols] = size(M);
for k = 1:length(M)
if M == 0
A=0;
elseif 0<M<=45
A=1;
elseif 45<M<=90
A=2;
elseif 0>M>=-45
A=3;
else
A=4;
end
end
csvwrite('imu2.csv',A);

  1 Comment

Image Analyst
on 11 May 2018
"write 0 in the second column" of what , A or M? If A, then what is in the first column of A?

Sign in to comment.

1 Answer

Star Strider
Answer by Star Strider
on 11 May 2018
 Accepted Answer

The loop and if block are not necessary.
I would simply do this:
M = randn(10, 1); % Create Vector
M = [M zeros(size(M))]; % Preallocate
M(M(:,1) > 0,2) = 1;
M(M(:,1) < 0,2) = 2;
That initially creates the second column as zeros, then sets the second column according to the positive and negative values in the first column.

  4 Comments

Show 1 older comment
Star Strider
on 11 May 2018
My pleasure.
The code changes to:
M = [M zeros(size(M))]; % Preallocate
M(( 0 < M(:,1)) & (M(:,1) <= 45 ) ,2) = 1;
M(( 45 < M(:,1)) & (M(:,1) <= 90 ) ,2) = 2;
M(( 0 > M(:,1)) & (M(:,1) >= -45 ) ,2) = 3;
M((-45 > M(:,1)) & (M(:,1) >= -90 ) ,2) = 4;
That does what you want. I kept the previous data name (here ‘M’) for consistency. You are of course free to change it.
it's work!
Thank you so much, I appreciate your help.
Star Strider
on 11 May 2018
As always, my pleasure!

Sign in to comment.