# How can I split a table at given rows?

65 views (last 30 days)
I have an n by m table, A, and a vector of indices, idx.
Is there a way to split my table into smaller tables, each beginning with the row indicated in idx?
For example:
A = ['str1', 'str2';
1, 2;
3, 4;
'str3', 'str4';
5, 6]
idx = [1; 4]
I would like:
A1 = ['str1', 'str2';
1, 2;
3, 4]
A2 = 'str3', 'str4';
5, 6]
Many thanks.

Try:
A1 = A(idx(1):idx(2)-1,:);
A2 = A(idx(2):end,:);
you can make that into a loop too if you have more values.

Thank you. For looping, I have:
B = zeros(1,length(idx));
for i = 1:1:length(idx)
B(i) = A(idx(i):idx(i+1)-1,:);
end
But, this returns the error:
"The following error occurred converting from table to double: Error using double. Conversion to double from table is not possible."
I assume that this is because of mixed data types. How might I correct this?
Cool! Congrats :)

Solution to this question:
B = cell(length(idx),1); %preallocates dimensions
for i = 1:1:length(idx)
%creates cell array that contains tables; each cell beginning with
%index idx(i) of table A, ending on index idx(i+1)-1
if i ~= length(idx) %if not last pass
B{i,:} = A(idx(i):idx(i+1)-1,:);
else
B{i,:} = A(idx(i):end,:);
end
end