MATLAB Answers

Robert
0

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

Asked by Robert
on 7 Mar 2017
Latest activity Commented on by 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.

2 Answers

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


Answer by 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

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.