Filter löschen
Filter löschen

HELP: Find All Rows of a table which meet a specific condition

647 Ansichten (letzte 30 Tage)
Hello everyone and thanks a lot in advance for your assistance.
Please allow me to introduce you to the problem:
I have an excel file where in the first column there are different students' names. Also, in the second and third column, there are the names of their hometowns and their class level, respectively.
For example:
George London Class B1
George Liverpoool Class B2
Andrew London Class C1
... ... ...
Mairy London Class C2
All these data were imported into Matlab via readable command (because with the xlsread I was getting NAN values).
Now what I need to do is a formula which will find all those students that live in 1 specific town. Let that town be London.
Next, from the previously created table, I need to find those students which belong to Class B1, B2, C1 and C2 respectively. Let B2 to be selected class for this example:
My code is as below:
Alldata = readtable('alldata.xlsx'); Hometown = alldata(:, 14); ==> The hometowns are in column 14.
Class = alldata(:, 13); ==> The classes are in column 13.
a = 'London';
b = 'Class B2';
Result1 = find(alldata.HOMETOWNS == 'a');
Relust 2 = find(alldata.CLASSES == 'b');
FinalTable = table(Relult1, Relust2);
I though that this should worked fine but I get the error: Undefined operator '==' for input arguments of type 'table'.
I also changed parenthesis to braces, the table(s) to cell arrays but nothing worked for me. Unfortunately, I have not too much experience with Matlab sofware, and hence, you are kindly requested to help me with this one cause I really don't have a clue about what is wrong.
I look forward to your reply.
Thanks a lot in advance guys,
Nick A.
  1 Kommentar
Emil Stobbe
Emil Stobbe am 3 Apr. 2020
Hi,
this was already really useful thanks! However I want to do the same thing but my condition is not a string but a subject number like 101. I cant get it to work. I figured that strcmp is not the right function but I could not find any other alternative.
Thanks in advance,
Best Wishes

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 8 Mai 2018
find is overused by newcomers to matlab. find is very rarely needed and it is certainly not needed in your case. That's unrelated to your problem though, it makes your code less efficient.
Your problem is that you cannot use == to compare char arrays. The proper way to compare char arrays is to use strcmp
FinalTable = alldata(strcmp(alldata.HOMETOWNS, 'London') & strcmp(alldata.CLASSES', 'Class B2'), :)
Note that if your intent is to split your table into several tables according to the class and hometown, then a) you shouldn't, and b) there are lot more efficient ways to do it than just copy/pasting the above and changing the condition each time.
  3 Kommentare
Emil Stobbe
Emil Stobbe am 3 Apr. 2020
Hi,
this was already really useful thanks! However I want to do the same thing but my condition is not a string but a subject number like 101. I cant get it to work. I figured that strcmp is not the right function but I could not find any other alternative.
Thanks in advance,
Best Wishes
Guillaume
Guillaume am 3 Apr. 2020
If you're trying to match numerical, logical or categorical values, then simply use the standard == comparison
FinalTable = yourtable(yourtable.SubjectNumber == 101, :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Peter Perkins
Peter Perkins am 14 Mai 2018
Convert thos variables to categorical, something like
alldata.HOMETOWNS = categorical(alldata.HOMETOWNS);
Then
i = (alldata.HOMETOWNS == 'a') && (alldata.CLASSES == 'b');
alldata(i,:)

ASJ
ASJ am 8 Mai 2018
Hi, try something like this:
Result01=alldata(alldata(:,14) =='London',:)
Result02=alldata(alldata(:,13) =='Class B2',:)
  2 Kommentare
Guillaume
Guillaume am 8 Mai 2018
You cannot use == to compare char arrays.
LU Chongkai
LU Chongkai am 31 Mär. 2020
changing the inner parentheses to brace make it works

Melden Sie sich an, um zu kommentieren.


Alon Zaharony
Alon Zaharony am 18 Jul. 2022
Hi,
See the following correspondance. It works for me:

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by