Naming VariableNames in a table based on a cell array

40 views (last 30 days)
I have an array data2 which is 1x576 and I have a cell array called data2_txt which is also 1x576. I have giving a small example below (the arrays im using are much larger)
data2=[1,5,3,5,6;1,2,4,12,6];
data2_txt={'Var1','Var2','Var3','Var4','Var5'}
Why do I get the error
Error using setVarNames (line 37)
The VariableNames property must contain one name for each variable in the table.
Error in table (line 305)
t = setVarNames(t,vnames); % error if invalid, duplicate, or empty"
When I use the following syntax
Table1=table(data2,'VariableNames',data2_txt);
I am able to get this to work if I use a loop. But given previous criticism of using loops vs vectorization in MatLab I am trying to avoid doing so to keep the code quick. Below is the code I can get working using a loop which is not very efficient
table3=table();
for i=1:length(data2)
table2a=table(data2(:,i),'VariableNames',data2_txt(i))
table3=horzcat(table3,table2a)
end
Any advice or direction would be greatly appreciated.

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 6 Jul 2016
Edited: Azzi Abdelmalek on 6 Jul 2016
data2=[1,5,3,5,6;1,2,4,12,6]
data2_txt={'Var1','Var2','Var3','Var4','Var5'}
Table1=cell2table(num2cell(data2),'VariableNames',data2_txt)
%Or
data2=[1,5,3,5,6;1,2,4,12,6]
data2_txt={'Var1','Var2','Var3','Var4','Var5'}
v=mat2cell(data2,size(data2,1),ones(1,size(data2,2)))
Table1=table(v{:},'VariableNames',data2_txt)
  5 Comments
Patrick
Patrick on 26 Jul 2016
Thank you for the feedback Guillaume. Good thing to know for the future
Peter Perkins
Peter Perkins on 3 Aug 2016
There's no need to use cell arrays for this. Instead of converting to a cell array, use array2table, not the table constructor:
Table1=array2table(data2,'VariableNames',data2_txt);

Sign in to comment.

More Answers (0)

Categories

Find more on Tables in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!