MATLAB Answers

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

24 views (last 30 days)
Robert
Robert on 7 Mar 2017
Commented: Robert on 8 Mar 2017
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!

  0 Comments

Sign in to comment.

Accepted Answer

Peter Perkins
Peter Perkins on 8 Mar 2017
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

Walter Roberson
Walter Roberson on 8 Mar 2017
I think you mean
tt = array2timetable(DATA(:,2:300), ...
'RowTimes', datetime(DATA(:,1), 'ConvertFrom', 'datenum'), ...
'VariableNames', file_list)
Robert
Robert on 8 Mar 2017
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)

Walter Roberson
Walter Roberson on 7 Mar 2017
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

Show 2 older comments
Robert
Robert on 8 Mar 2017
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?
Walter Roberson
Walter Roberson on 8 Mar 2017
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.