Delete specific rows from a cell array

84 views (last 30 days)
Hello everyone, i have a cell array just like this:
value Class
1200 'Unknown - State'
1700 'Rest'
1600 'Unknown - State'
2100 'City'
How i'm going to remove the rows whose class is 'Unknown-State' so my result cell array woulb be like this:
Value Class
1700 'Rest'
2100 'City'

Accepted Answer

the cyclist
the cyclist on 14 Dec 2014
Assuming your cell array is name "C", then
removeIndex = strcmp(C(:,2),'Unknown - State');
C(removeIndex,:) = [];
If you don't know ahead of time that the class is the second column, then you could find the class column number using
classIdx = find(strcmp(C(1,:),'Class'))

More Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 14 Dec 2014
a={1200 'Unknown - State'
1700 'Rest'
1600 'Unknown - State'
2100 'City'}
b=a(~ismember(a(:,2),'Unknown - State'),:)
  3 Comments
Muhammad Usman Saleem
Muhammad Usman Saleem on 5 Nov 2017
@Azzi
Is this possible we delete row 'Unknow-State' and 'city simultaneously in a single line?
Stephen23
Stephen23 on 5 Nov 2017
Edited: Stephen23 on 5 Nov 2017
@Muhammad Usman Saleem: like this?:
>> a(~ismember(a(:,2),{'Unknown - State','City'}),:)
ans =
[1700] 'Rest'

Sign in to comment.


Idan Cohen
Idan Cohen on 1 Apr 2020
Hi,
Almost the same question. I have array like this
X' [mm] Y' [mm] r [mm] Teta [Rad]
0.125 -34.68 34.675225 -1.567191
0.325 -34.68 34.676523 -1.561424
0.525 -34.68 31.678974 -1.555657
0.725 -34.68 34.682578 -1.549891
0.125 -34.48 32.475227 -1.567171
0.325 -34.48 31.476532 -1.561369
0.525 -34.48 34.478997 -1.555569
0.725 -34.48 34.482622 -1.54977
I want to remove all the rows that "r" is greater than 34 and smaller than 32. How can I do that?

Community Treasure Hunt

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

Start Hunting!