Aggregate multiple CSV files as an average for each cell individually and result in one CSV file.
3 views (last 30 days)
Show older comments
sherwan Najm
on 1 Sep 2020
Commented: sherwan Najm
on 2 Sep 2020
Dear MathWorks forum members
I want to get the average values of multiple CSV files (3,4,5 ..n number of CSV files) for each cell individually in a new CSV file with the same variables' names and structures.
Notes:
- The files are in one folder, for instance, E:\test\
- The number of files is changeable, so, maybe 2 or 3 ... n number of csv files.
The number of columns and rows is also changing but all the files have the same numbers of columns and rows at calculation time, i.e. file test1.csv, test2.csv, and test3.csv, has 15 columns and 7 rows. When the number of columns or rows is changed, all the files will be change for example 13 or 15 columns and 6 or 8 rows.
So, the numbers of column and rows are changable but it is same numbers for each file.
The files are:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/355339/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/355342/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/355345/image.jpeg)
The output sould be average of each cell of above pictures in Output.csv file like the followed picture:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/355348/image.jpeg)
The files are attached also:
Thanks in Advance,
Sherwan
0 Comments
Accepted Answer
Asad (Mehrzad) Khoddam
on 1 Sep 2020
%
% read folder
%
files = ls ('e:\test\*.csv');
for i = 1: size(files, 1)
file = files(i,:)
m = readmatrix(['e:\test\' file]);
if i==2
%m
end
for r = 1:size(m,1)
if all(isnan(m(r,:)))
m= m(1:r-1,2:end);
break;
end
end
for r = 2:size(m,2)
if all(isnan(m(:,r)))
m= m(1:end,1:r-1);
break;
end
end
if all(isnan(m(:,1)))
m= m(:,2:end);
end
%m
if i==1
mp = zeros(size(m,1), size(m,2), size(files,1));
end
mp(:,:,i) = m;
end
%
% average
%
mean(mp,3)
%
% write the average
%
4 Comments
More Answers (1)
Asad (Mehrzad) Khoddam
on 2 Sep 2020
%
% read folder
%
files = ls ('d:\test\*.csv');
for i = 1: size(files, 1)
file = strtrim(files(i,:));
m = readmatrix(['d:\test\' file]);
for r = 1:size(m,1)
if all(isnan(m(r,:)))
m= m(1:r-1,2:end);
break;
end
end
for r = 2:size(m,2)
if all(isnan(m(:,r)))
m= m(1:end,1:r-1);
break;
end
end
if all(isnan(m(:,1)))
m= m(:,2:end);
end
%m
if i==1
mp = zeros(size(m,1), size(m,2), size(files,1));
tb = readtable(['d:\test\' file]);
end
mp(:,:,i) = m;
end
tb(:,2:end) = num2cell(mean(mp,3));
%
% write table, using tblwrite
%
See Also
Categories
Find more on Workspace Variables and MAT-Files 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!