Error when trying to remove rows with specific values from cell array.

1 view (last 30 days)
I have a cell array that looks like this with strings and numbers
I'm trying to write simple code that will remove entire rows in the array if numbers 1-20 are present in column 1:
toremove = [1:20];
event_time(ismember(event_time(:,1),toremove)) = [];
However I receive this error when I run my code
Error using cell/ismember
Input A of class cell and input B of class double must be cell arrays of character vectors, unless one is a character vector.
How would I index event_time by the numbers in column 1? They are not strings/characters so strcmp does not work, and treating them as integers, as above does not work either. Many thanks!

Accepted Answer

Star Strider
Star Strider on 7 Nov 2020
Try this:
CA = num2cell(randi(50, 25, 5)); % Create Cell Array
idx = cellfun(@(x)ismember(x, 1:20), CA(:,1)); % Logical Vector Selecting (1:20) In Column #1
CAedited = CA(~idx,:); % Eliminat Rows Meeting Criteria
Use your own cell array for ‘CA’.
  6 Comments
Aleya Marzuki
Aleya Marzuki on 7 Nov 2020
Edited: Aleya Marzuki on 7 Nov 2020
Many thanks! I tweaked your code a bit so that idx takes into account the first row in event_time which contains 'trial'. Without taking this into account, the idx file is too short (with one row less than the number of rows of the original file)
idx = cellfun(@(x)ismember(x, 1:20), event_time(1:end,1), 'Uni',0); % Idx outputs 1 if 1-20 is in Column #1 and 0 otherwise
idx(1,:)= {[0]}; % need to convert first row of index to 0 because the string 'trial' shows [0,0,0,0,0], which will make the index fail to work
event_time = event_time(~[idx{:}],:); % remove any rows where idx = 1

Sign in to comment.

More Answers (0)

Categories

Find more on Cell Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!