Split array in 3 groups by using one column values
3 次查看(过去 30 天)
显示 更早的评论
Hi,
I would like to split my data in 3 groups based on the values in axis 1
x = < 25 i would like to get a 0
x = > 25 < 419 i would like to get a 1
x = > 419 i would like to get a 2
how can I do this?
% Clear memory
clear; close all;
% Load data
T=readtable('SC01001 (2018-11-23)15sec.csv','PreserveVariableNames',true)
x1=T(:,1); %Date
x2=T(:,2); % Time
y1=T(:,3); % Axis 1
if
y1 <25
y1 = 0
elseif
y1 25>y1<419
y1 = 1
elseif
y1 >419
y1 = 2
end
0 个评论
采纳的回答
Marta G
2020-2-24
编辑:Marta G
2020-2-24
You shouldnt use a vector in a if condition.
In your case, it would be more effective to use this
loc=find(y1<25);
y(loc)=0;
loc1=find(y1>25 & y1<419);
y(loc1)=1;
loc2=find(y1>419);
y(loc2)=2;
If you are new to matlab you might understand the problem better with a for loop.
for i=0:length(y1)
if(y1(i)<25)
y(i)=0;
elseif (y1(i)>25 & y1(i)<419)
y(i)=1;
else
y(i)=2;
end
end
I prefer to not rewrite any variable i am using until it is completely necessary.
Make sure you really need those intervals and consider what you have to do if y1=25 since in your original code it would not enter any if else condition
7 个评论
Marta G
2020-2-25
编辑:Marta G
2020-2-25
Hello,
Thank you Ankit for your correction
There is a step missing:
x1=T(:,1); %Date
x2=T(:,2); % Time
y1=table2array(T(:,3)); % Axis 1
for i=1:length(y1)
if(y1(i)<25)
y(i)=0;
elseif (y1(i)>25 & y1(i)<419)
y(i)=1;
else
y(i)=2;
end
end
Make sure in future problems that you read the error and understand what it means, as that line missing is easily solvable. If you need matrix or vectors instead of table you can use table2array: https://es.mathworks.com/matlabcentral/answers/380821-how-to-convert-table-to-matrix
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!