Split a Table at every nth row

I have a table that is approximately 96,000 lines long, i need to split it into tables that are approximately 28,000 lines long, how would i go about doing this?

Réponses (2)

the cyclist
the cyclist le 17 Oct 2023

0 votes

Here is one way:
% Make up a table
var1 = rand(96000,1);
var2 = rand(96000,1);
tbl = table(var1,var2);
% Define the smaller table size
smallSize = 28000;
% Break it up, storing each smaller table in a cell array
numberTables = ceil(height(tbl)/smallSize);
smallTables = cell(numberTables,1);
for nt = 1:numberTables-1
indexToThisChunk = ((nt-1)*smallSize+1):(nt*smallSize);
smallTables{nt} = tbl(indexToThisChunk,:);
end
smallTables{numberTables} = tbl((numberTables-1)*smallSize+1:end,:);
Voss
Voss le 17 Oct 2023
T = array2table(rand(96014,10)) % approximately 96000 rows in the table
T = 96014×10 table
Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 ________ ________ ________ ________ ________ ________ ________ ________ _______ ________ 0.18892 0.089271 0.88321 0.80645 0.11043 0.2568 0.26967 0.25484 0.45477 0.1718 0.96556 0.043578 0.65871 0.053808 0.79238 0.93371 0.47394 0.33111 0.53997 0.69855 0.44455 0.35608 0.20507 0.86167 0.45956 0.55613 0.17145 0.82845 0.96604 0.47359 0.78605 0.67024 0.62304 0.99474 0.60555 0.87158 0.89374 0.81122 0.59305 0.076403 0.73205 0.75425 0.098652 0.71518 0.8582 0.85426 0.081266 0.26992 0.1171 0.48139 0.38181 0.48638 0.7665 0.43862 0.74424 0.3341 0.53427 0.82315 0.10296 0.70811 0.82262 0.19081 0.32617 0.89847 0.86008 0.71494 0.76669 0.34935 0.81139 0.84729 0.99334 0.35128 0.82732 0.43145 0.38879 0.078514 0.38516 0.010543 0.46569 0.67649 0.8923 0.32302 0.78348 0.51972 0.058376 0.94041 0.026721 0.81799 0.90268 0.059318 0.88259 0.24735 0.54698 0.026204 0.069982 0.95805 0.06013 0.67848 0.5047 0.78035 0.29519 0.72573 0.09278 0.70563 0.4629 0.62191 0.11337 0.78986 0.98262 0.85354 0.86889 0.87236 0.63646 0.45804 0.10876 0.84118 0.31049 0.70684 0.71617 0.9416 0.45682 0.27314 0.75879 0.072619 0.78057 0.37275 0.32682 0.11941 0.15683 0.32215 0.21714 0.21188 0.23398 0.12094 0.83434 0.83769 0.11437 0.24897 0.91117 0.45116 0.17097 0.42333 0.38257 0.34116 0.91046 0.55847 0.46121 0.30671 0.82085 0.53366 0.020299 0.29129 0.41523 0.62268 0.79487 0.20559 0.13821 0.42927 0.96562 0.68949
One approach: Split T into tables that are exactly 28000 rows long, plus another smaller table for the leftover rows at the end:
n_rows = 28000;
n_tables = ceil(size(T,1)/n_rows);
C = cell(n_tables,1);
for ii = 1:n_tables
C{ii} = T((ii-1)*n_rows+1:min(ii*n_rows,end),:);
end
disp(C);
{28000×10 table} {28000×10 table} {28000×10 table} {12014×10 table}
Another approach: Split T into (almost) equally-sized tables, each with as close to 28000 rows as you can get:
n_rows_target = 28000;
n_rows_T = size(T,1);
n_tables_min = floor(n_rows_T/n_rows_target);
n_tables_max = ceil(n_rows_T/n_rows_target);
n_rows_max = n_rows_T/n_tables_min;
n_rows_min = n_rows_T/n_tables_max;
if n_rows_max - n_rows_target > n_rows_target - n_rows_min
n_rows = floor(n_rows_min);
n_tables = n_tables_max;
else
n_rows = floor(n_rows_max);
n_tables = n_tables_min;
end
n_rows_extra = n_rows_T - n_rows*n_tables;
n_rows = n_rows * ones(1,n_tables);
n_rows(1:n_rows_extra) = n_rows(1:n_rows_extra) + 1;
start_idx = 1 + cumsum([0 n_rows]);
C = cell(n_tables,1);
for ii = 1:n_tables
C{ii} = T(start_idx(ii):start_idx(ii+1)-1,:);
end
disp(C);
{24004×10 table} {24004×10 table} {24003×10 table} {24003×10 table}

2 commentaires

Jacob Child
Jacob Child le 19 Oct 2023
Modifié(e) : Jacob Child le 19 Oct 2023
For your first approach, how to i get it to output the table so that i can write it to an excel (.xls) sheet? im not seeing the tables in the workspace after i run it other than the original table
In both approaches, the tables are stored in the cell array C.
You can write each table to a different sheet of a xls file like this:
output_file = 'tables.xls';
for ii = 1:numel(C)
writetable(C{ii},output_file,'Sheet',ii);
end

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Identification dans Centre d'aide et File Exchange

Produits

Tags

Commenté :

le 19 Oct 2023

Community Treasure Hunt

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

Start Hunting!

Translated by