There isn't an option to arrange subheadings as described in your attached image.
However, there are several ways to rearrange the table to contain subheadings.
Option 1: nested subheaders
MATLAB R2018b or later
apples = table([3;4],[1;4],'VariableNames',{'old','new'});
oranges = table([3;4],[1;4],'VariableNames',{'old','new'});
strawberries = table([3;4],[1;4],'VariableNames',{'old','new'});
grapefruit = table([3;4],[1;4],'VariableNames',{'old','new'});
fruit = table(apples, oranges, strawberries, grapefruit)
fruit =
apples oranges strawberries grapefruit
old new old new old new old new
__________ __________ ____________ __________
3 1 3 1 3 1 3 1
4 4 4 4 4 4 4 4
Option 2: nested subheaders version 2
MATLAB R2018b or later
old = table([3;4],[6;4],[5;3],[1;2], 'VariableNames', {'apples','ornages','strawberries', 'grapefruit'});
new = table([1;4],[1;13],[2;11],[3;3], 'VariableNames', {'apples','ornages','strawberries', 'grapefruit'});
fruit = table(old,new)
fruit =
old new
apples ornages strawberries grapefruit apples ornages strawberries grapefruit
_______________________________________________ _______________________________________________
3 6 5 1 1 1 2 3
4 4 3 2 4 13 11 3
Option 3: Store subheaders in a table variable
MATLAB R2013b or later
Note that the use of subheadings above makes indexing difficult. Here's a recommendation that preserves the labels but allows for easier indexing:
fruit = table(["old";"old";"new";"new"], ...
[3;4;1;4],[6;4;1;13],[5;3;2;11],[1;2;3;3], ...
'VariableNames', {'age','apples','oranges','strawberries','grapefruit'})
fruit =
age apples oranges strawberries grapefruit
_____ ______ _______ ____________ __________
"old" 3 6 5 1
"old" 4 4 3 2
"new" 1 1 2 3
"new" 4 13 11 3