Split array in 3 groups by using one column values
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
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
채택된 답변
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
small correction in the first line of the for loop, i think by mistake you wrote 0 instead of 1.
I tried both of them,
at the first one, while using the location method, I get the following error message:
Undefined operator '<' for input arguments of type 'table'.
Error in main (line 10)
loc=find(y1<25);
but while using the for loop I get the following error message:
Error using main (line 11)
Subscripting into a table using one subscript (as in t(i)) or three or more subscripts (as in t(i,j,k)) is not
supported. Always specify a row subscript and a variable subscript, as in t(rows,vars).
How can I solve this problem?
could you post the code which throws above error when you are using for loop? What is "t" in your code?
This is everything i have
% 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
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
The error code it gaves is
Error using tabular/length (line 211)
Undefined function 'length' for input arguments of type 'table'. Use the HEIGHT, WIDTH, or SIZE functions
instead.
Error using main (line 12)
Subscripting into a table using one subscript (as in t(i)) or three or more subscripts (as in t(i,j,k)) is not
supported. Always specify a row subscript and a variable subscript, as in t(rows,vars).
for i=1:length(y1)
I didn't see any error in the above code. Are you able to readtable ? you can see y1 in workspace? you attached xlsx file why not attached csv file? this is how y look when i use your attach excel sheet

Everything above the for loop works for me. This is the screen I get. Even when I try the xlsx file, i keep getting the same error message

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개)
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
참고 항목
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
