Borrar filtros
Borrar filtros

How to select fields of a struct that contains certain string?

21 visualizaciones (últimos 30 días)
JCH
JCH el 7 de Feb. de 2023
Comentada: JCH el 8 de Feb. de 2023
I have created a trial table of 1x300 struct with 1 field, and within every struct, there are five fields.
for every struct, there is one string in massage that is either 1 or 2, which indicates the type of the struct.
How can I select the structs that only have 1 in there? Thank you.
the table is attached.
  2 comentarios
Matt J
Matt J el 7 de Feb. de 2023
Please attach the table in a .mat file.
Matt J
Matt J el 7 de Feb. de 2023
It would advisable for you to avoid refering to variables as "tables" unless they really are Matlab table variables.

Iniciar sesión para comentar.

Respuesta aceptada

Voss
Voss el 7 de Feb. de 2023
Maybe something along these lines:
load table
selected = [];
for ii = 1:numel(trial_table)
msg = {trial_table(ii).trial.message};
idx = strcmp(msg,'1');
selected = [selected trial_table(ii).trial(idx)];
end
disp(selected);
1×150 struct array with fields: message time code reltime pvel
  5 comentarios
Voss
Voss el 7 de Feb. de 2023
Editada: Voss el 7 de Feb. de 2023
You're welcome!
Note that I made selected a cell array because I assume you want to keep the trials separated (i.e., each cell of selected contains a struct array representing one trial), but if that's not the case, you can make selected itself a struct array:
load table
selected_trial_idx = [];
for ii = 1:numel(trial_table)
msg = {trial_table(ii).trial.message};
idx = strcmp(msg,'1');
if any(idx)
selected_trial_idx(end+1) = ii;
end
end
selected = [trial_table(selected_trial_idx).trial]; % use [] instead of {}
disp(selected);
1×11194 struct array with fields: message time code reltime pvel
JCH
JCH el 8 de Feb. de 2023
Thx, if I also want to mark their trials, saying these data are from trial 1 or 2, what should I do. Thank you again!

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 7 de Feb. de 2023
Editada: Matt J el 7 de Feb. de 2023
load table
for i=1:numel(trial_table)
s=trial_table(i).trial;
[~,loc]=ismember({'1','2'},{s.message});
result(i)=s(loc(loc~=0));
end
result
result = 1×300 struct array with fields:
message time code reltime pvel

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by