Table to Array conversion using a for loop
8 ビュー (過去 30 日間)
表示 古いコメント
Hi! Is there a way I can do this operation within a for loop?
load 'temps-2021-11-16.mat'
temps_2021_11_16 = table2array(data(:,:));
load 'temps-2021-10-31.mat'
temps_2021_10_31 = table2array(data(:,:));
load 'temps-2021-10-15.mat'
temps_2021_10_15 = table2array(data(:,:));
load 'temps-2021-09-13.mat'
temps_2021_09_13 = table2array(data(:,:));
load 'temps-2021-09-29.mat'
temps_2021_09_29 = table2array(data(:,:));
load 'temps-2021-08-12.mat'
temps_2021_08_12 = table2array(data(:,:));
load 'temps-2021-07-27.mat'
temps_2021_07_27 = table2array(data(:,:));
load 'temps-2021-04-06.mat'
temps_2021_04_06 = table2array(data(:,:));
load 'temps-2021-03-21.mat'
temps_2021_03_21 = table2array(data(:,:));
load 'temps-2021-03-05.mat'
temps_2021_03_05 = table2array(data(:,:));
load 'temps-2021-02-17.mat'
temps_2021_02_17 = table2array(data(:,:));
Thank you so much!
1 件のコメント
Stephen23
2022 年 7 月 11 日
編集済み: Stephen23
2022 年 7 月 11 日
temps_2021_02_17 = ..
% ^^^^^^^^^^ do not force meta-data into variable names
unless you really want to force yourself into writing slow, complex, inefficient, obfuscated, insecure, buggy code that is hard to debug:
Those files are so neatly designed with one variable name (i.e. 'data'), it really would be such a shame to awkwardly force meta-data into variable names. Indexing is simpler and much more efficient.
採用された回答
Jon
2022 年 7 月 11 日
編集済み: Jon
2022 年 7 月 11 日
I agree with @Stephen23 comments about not using dynamically named variables, here's another approach, in which you store all of the data in a single table. You can then easily retrieve data corresponding to a particular date, as shown in the end of the example code,
% get list of relevant data files
list = dir('temps-*.mat')
% loop through data files saving data into tables
tableCell = cell(numel(list),1); % cell array to temporarily hold individual tables
for k = 1:numel(list)
load(list(k).name) % load the table
% find number of rows in the table
numRows = size(data,1);
% add new first column to table with date corresponding to source file name
[~,name] = fileparts(list(k).name)
date = datetime(name(7:end))
dateColumn = table(repmat(date,numRows,1),'VariableNames',{'date'});
data = [dateColumn data]
% put table into temporary cell array
tableCell{k}= data;
end
% concatenate table to make overall table
dataTable = vertcat(tableCell{:})
% now if for example you want an array of data corresponding to
% 2021-10-31 you can use
idl = dataTable.date == '2021-10-31'
data = table2array(dataTable(idl,2:end))
その他の回答 (1 件)
Stephen23
2022 年 7 月 11 日
編集済み: Stephen23
2022 年 7 月 11 日
A much better approach stores the imported data in the structure returned by DIR:
P = 'absolute or relative path to where the files are saved';
S = dir(fullfile(P,'*.mat'));
for k = 1:numel(S)
F = fullfile(P,S(k).name);
T = load(F);
S(k).data = table2array(T.data);
end
All of the imported data will be available in the structure S, for example the 2nd file:
S(2).name
S(2).data
0 件のコメント
参考
カテゴリ
Find more on Operators and Elementary Operations 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!