How to use function table (or timetable) inside a loop to generate a final table that contains a large number of variables (columns) with names

Wondering if anyone could suggest how to use the function table (or timetable) inside a loop to generate a final table that contains a large number of variables (columns) with names?
%This is my wrong attempt...
T = array2table(DATA);
%DATA is an array with 1st column (sorted dates), following 300 columns (data, double), and over 100.000 rows.
for kk=1:size(DATA,2)
name={num2str(file_name_list{kk})}; % Generate individual names to add to next step
T =[T; array2table(DATA,'VariableNames', {name})]; % Trying to add new names to columns...
end
%... to get something like
Time VarName1 VarName2 ... VarName300
'20-Sep-2001 00:00:00' 10 2.5 ... NaN
'20-Sep-2001 01:00:00' NaN 0.34 ... 12
'20-Sep-2001 02:00:00' 0.1 NaN ... 0.4
... ... ... ... ...
Thanks!

 Accepted Answer

I'm not sure what is actually in the array DATA. I may have missed that in your description. It sounds like it might be a numeric array with datenums in column 1 and numbers in columns 2:300 (or 2:301?). And then file_list is a 1x300 (1x301?) cell array of char vectors like 'AGR_OCEAN_001'.
So maybe
tt = array2timetable(DATA(2:300), ...
'RowTimes',datetime(Data,'ConvertFrom','datenum'), ...
'VariableNames',file_list)
No loop needed. But I think we're gonna need to see a real, small example of what you have.

3 Comments

I think you mean
tt = array2timetable(DATA(:,2:300), ...
'RowTimes', datetime(DATA(:,1), 'ConvertFrom', 'datenum'), ...
'VariableNames', file_list)
That works great! Thank you to all of you for make time to help people like me to learn and advance in Matlab world. Very appreciated!

Sign in to comment.

More Answers (1)

Almost!
T =[T, array2table(DATA,'VariableNames', {name})]; % Trying to add new names to columns...
This changes the ";" to ","
For example,
T = array2table(randi(6,5,2))
T = [T,array2table(randi(10,5,7), 'VariableNames', {'A1','A2','A3','A4','A5','A6','A7'})]

5 Comments

Thank you for the correction Walter, very appreciated! Based on it I changed a little bit my code to:
%DATA = 120096x395 double, 1st column are Dates (serial date # matlab)
T = array2table(DATA(:,1));
%This now create a Table with one column, which has the dates
for kk=1:size(DATA,2)
name={num2str(file_list{1,kk})};
% Generate individual names to add to next step
%file_list = 1x394 (Class cell)
T =[T, array2table(DATA(:,2:end),'VariableNames', {name})];
%Trying to add new names to columns...
end
Unfortunately the loop portion to add the variable names is not working, as I am getting this error...
Error using array2table (line 62) The VariableNames property must be a cell array, with each element containing one nonempty character vector.
Any corrections or suggestions? Thanks!
name = arrayfun(@(N) sprintf('Var%d',N), file_list{1,kk}, 'Uniform', 0);
This asumes that file_list{1,kk} contains a vector of numbers and that you want the variables named 'Var' followed by the corresponding number. Note that numbers cannot be used as variable names in themselves: each name must be a valid MATLAB identifier.
Thanks Walter for making time to help me with this, very appreciated. My file list unfortunately doesn't have numbers on it, as you can see below, each one of the file_list (1x394) cells have the name of the variable like...
>> file_list(1,1)
ans =
cell
'AGR_OCEAN_001'
Any suggestions?
My guess:
T = array2table(DATA(:,1));
%This now create a Table with one column, which has the dates
for kk = 2 : size(DATA,2)
name_cell = file_list(kk);
% Generate individual names to add to next step
T = [T, array2table(DATA(:,kk),'VariableNames', name_cell)];
end
However, if you were going to do that, then just
T = array2table(DATA, 'VariableNames', file_list);
with no loop.

Sign in to comment.

Categories

Asked:

on 7 Mar 2017

Commented:

on 8 Mar 2017

Community Treasure Hunt

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

Start Hunting!