Combine multiple tables into the one
回答(3 个)
You can simply combine tables in the same way as you can combine matrices in MATLAB, as long as dimensions are consistent. For example, if you have two tables t1 and t2 of dimension 21600x5 then
new_table = [t1 t2] % combine them along column dimension i.e. new table will be 21600x10 new_table = [t1; t2] % combine them along row dimension i.e. new table will be 43200x5
Since you want to access 31 variables in your workspace, you might want to use whos and evalin() to automatically access all the tables in the base workspace and combine them. As an example
vars = whos;
big_table = [];
for i=vars'
if i.class == "table"
big_table = [big_table; evalin('base', i.name)];
end
end
This will load all the tables present in base workspace into big_table. This will combine the tables according to their names in ascending order (i.e. table axx will be above table bxx in big_table).
3 个评论
@Stephen I agree, but this question was mainly about combining several tables into one big table. Therefore to make it general, I wrote the answer, as if, several tables are already present in the base workspace. In that case, magically accessing variable names is a convenient option. I addressed the issue of properly accessing variables in OP's other question, because that question is specifically talking about reading tables from mat files and writing to excel file.
As I wrote earlier, simply load into a structure. Then you convert the struct to a cell, and it is then trivial to concatenate the contents of all cells:
S = load(...);
C = struct2cell(S);
T = vertcat(C{:});
And that is all. Why waste your time doing anything more complex?
Note that in order to concatenate the tables they will have to have the same variables but unique rows. If they do not have unique rows then you can easily loop over the fields of that structure to add a new variable to each table, or change one of the row values, or whatever you want:
S = load(...);
F = fieldnames(S)
for k = 1:numel(F)
tmp = S.(F{k}); % get one table
... do whatever changes you want to tmp
S.(F{k}) = tmp;
end
Note how much simpler it is to access the fieldnames of a structure, compared to the slow, complex, and indirect commands which try to access multiple variables in the workspace.
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!