Concatenating multiple tables in a cell array

Hello Everyone, I have a cell array with hundreds of tables in it, It's a 1165x1 cell array. The first 499 are empty cells but the rest have tables in them. from T{500} to T{end}
Most of the tables are 20x153 tables but some of them have different amount of columns (I have identified about 10 out of the 500) which have columns ranging from 130 to 157 columns. Is there a way I could concatenate vertically all the tables in the cell array with 20x153 dimensions ignoring these outliers?
Thank you.

댓글 수: 2

The entries that have fewer than 153 columns: you want to ignore those entries completely, right?
The entries that have more than 153 columns: do you want to ignore those entries completely, or do you want the first 153 columns of them to be used?
Well I was actually looking for an easy way out haha,I think I’d prefer the second option if it’s possible.

댓글을 달려면 로그인하십시오.

 채택된 답변

Walter Roberson
Walter Roberson 2021년 7월 19일

0 개 추천

mask = cellfun(@(c) size(c,2) == 153, T);
Tfull = vertcat(T{mask});

댓글 수: 8

It helps a lot, thanks so much
A slight modification should allow you to keep the first 153 variables of tables that have more variables than that:
mask = cellfun(@(c) size(c,2) >= 153, T);
T2 = cellfun(@(tbl) tbl(:,1:153), T(mask), 'UniformOutput',false);
Tfull = vertcat(T2{:});
Yes, that should work well.
Okay, I'll try it and see. Thank you for your input @Peter Perkins, Hey, @Walter Roberson, I tried this code about 5 times but on my computer, it takes about 7hrs on average to import about 700 xml files. What do you think from your experience, could it be much faster or is that how long it should take that specific amount of files running this code on an average Mac. Would like to know your thoughts.
What code are you using to import the XML files?
Are the XML files stored on hard drive or on SSD?
okay this the code. The xml files are stored on a one drive. But I think I get a notofication that MATLAB downloads to my drive which is an SSD when starting to run the code.
%% Import xml files, well about half of it
xmlFiles = dir('*.xml');
N = length(xmlFiles);
T = cell(N,1);
for i = 500:N %The reason I chose 500 is because importing from 1 never completes
% There are about 1,200 files in all
T{i} = readtable(xmlFiles(i).name) ;
end
celldisp(T) % to display activity in command window
%% Concatenating all tables
mask = cellfun(@(c) size(c,2) == 153, T);
T_merged = vertcat(T{mask});
That code does not download from OneDrive to local disk, but if possible you would really rather read from local disk than from OneDrive. The performance loss for reading from OneDrive can be substantial. Even just starting by copying the files to local drive can improve performance a lot.
I see, thanks a lot, I appreciate your suggestions

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2021년 7월 19일

댓글:

2021년 7월 27일

Community Treasure Hunt

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

Start Hunting!

Translated by