How to concatenate tables with the same number of variables but different number of rows?
1 次查看(过去 30 天)
显示 更早的评论
I have a series of tables (AA.mat, BB,mat, CC.mat, etc...17 in total), each of them with diiferent number of rows but same number of variables (24x4, 21x4, 3x4, 29,x4, etc.). How can I merge all these tables into a single one, so it vertically concatenates rows? Thank you!
0 个评论
回答(2 个)
Guillaume
2018-12-6
AA.mat, etc. are mat files not tables. Each of these file could contain any number of variables. Possibly, each of these only contain one variable, a table but that's not what you've actually described. If it is the case,
filelist = {'AA.mat', 'BB.mat', '...'}; %list of files containing the tables, possibly obtained by dir
folder = '???'; %possibly equal to pwd
fulltable = cell(size(filelist)); %cell array to receive the table contained in each file
for fileidx = 1:numel(filelist)
filecontent = load(fullfile(folder, filelist{fileidx})); %load file
varlist = fieldnames(filecontent); %get list of variables in the file
assert(numel(varlist) == 1, 'File %s contains more than one variable', filelist{fileidx}); %check that there is only one variable in the file
fulltable{fileidx} = filecontent.(varlist{1}); %extract the one variable in the cell array
assert(isa(fulltable{fileidx}, 'table'), '%s in %s is not a table', varlist{1}, filelist{fileidx}); %check that the one variable is indeed a table
end
fulltable = vertcat(fulltable{:}); %concatenate all the tables
6 个评论
Guillaume
2018-12-6
You need to explain better what you have. mat files, variables, and tables are completely different things. My understanding:
- you have 17 mat files (with absolutely rubbish names!)
- each of these 17 mat files contain 4 variables always named participant, mean_RT, RT_date, RT_time, possibly these variables are tables
Now, do you want to produce 17 tables, one for each file, where each table is the concatenation of the 4 variables (that's what you appear to ask)?
Or do you want to produce 4 tables, one for each variable, where each table is the concatenation of the respective variable in each file (that would make more sense)?
Or do you want to produce just 1 table, which is the concatenation of all the variables in all of the files?
Stephen23
2018-12-6
编辑:Stephen23
2018-12-6
Assuming that the data have the same class, that each .mat file contains the same four variables, and that within any one mat file they all have the same number of rows... try something like this:
D = 'path to folder where the .mat files are saved';
S = dir(fullfile(D,'*.mat'));
N = numel(S);
C = cell(N,4);
for k = 1:N
T = load(fullfile(D,S(k).name));
T = orderfields(T);
C(k,:) = struct2cell(T).';
end
M = cell2mat(C)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!