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

6 次查看(过去 30 天)
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!

采纳的回答

Star Strider
Star Strider 2020-11-7
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 个评论
Aleya Marzuki
Aleya Marzuki 2020-11-7
编辑:Aleya Marzuki 2020-11-7
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

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by