Clear Filters
Clear Filters

Aggregate multiple CSV files as an average for each cell individually and result in one CSV file.

3 views (last 30 days)
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:
The output sould be average of each cell of above pictures in Output.csv file like the followed picture:
The files are attached also:
Thanks in Advance,
Sherwan

Accepted Answer

Asad (Mehrzad) Khoddam
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
sherwan Najm
sherwan Najm on 2 Sep 2020
Dear Mr. Asad (Mehrzad) Khoddam,
Thanks for the addition syntax, it solved the first issue. I am looking forward to the second question answer, please.
Respectfully Yours

Sign in to comment.

More Answers (1)

Asad (Mehrzad) Khoddam
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
%
  1 Comment
sherwan Najm
sherwan Najm on 2 Sep 2020
Dear Mr. Asad (Mehrzad) Khoddam,
Wow, very big thanks to you, I appreciate your help and I am grateful for your support. The code is more than excellent for me. thank you so very much.
Respectfully Yours
Sherwan

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!