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

6 visualizaciones (últimos 30 días)
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!

Respuesta aceptada

Star Strider
Star Strider el 7 de Nov. de 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 comentarios
Aleya Marzuki
Aleya Marzuki el 7 de Nov. de 2020
Editada: Aleya Marzuki el 7 de Nov. de 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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by