Delete empty field - rows in a structure

123 views (last 30 days)
SS on 25 Jul 2019
Commented: Hamza Imtiaz on 21 Sep 2020
I have a structure which has some empty field - rows. How can, I delete these empty them from the structure?
Guillaume on 25 Jul 2019
Yes, the structure has only one row and 935 columns and it's the columns you want deleted. When the structure array is a vector matlab displays it in a tabular format along the rows regardless of whether it's a row vector or a column vector.
You may want to consider using a table instead of a structure. This would be a lot easier for you to manipulate. I'll write that as an answer.

Sign in to comment.

Accepted Answer

Adam on 25 Jul 2019
Added as an answer since it seemed to solve the problem.
Track_20( all( cell2mat( arrayfun( @(x) structfun( @isempty, x ), Track_20, 'UniformOutput', false ) ), 1 ) ) = [];
would work, I think, though it looks ghastly. I'm sure there is probably a simpler way!

More Answers (2)

Andrei Bobrov
Andrei Bobrov on 25 Jul 2019
Edited: Andrei Bobrov on 25 Jul 2019
out = Track_20(all(~cellfun(@isempty,struct2cell(Track_20))));

Guillaume on 25 Jul 2019
Edited: Guillaume on 25 Jul 2019
As commented, you may want to use a table instead of a structure. tables are a lot easier to use:
t_track20 = struct2table(track_20); %convert structure to table
%t_track20 = rmmissing(t_track20); %remove empty rows. All done!
edit: actually no, it's more complicated, as rmmissing doesn't work with cell arrays variables.:
toremove = rowfun(@(varargin) isempty([varargin{:}]), t_track20, 'ExtractCellContents', true);
t_track20(toremove, :) = [];
You may still want to use a table, generally it is easier to work with than structures. You can easily index table by row or by variables.

Community Treasure Hunt

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

Start Hunting!

Translated by