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

3 次查看(过去 30 天)
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

采纳的回答

Asad (Mehrzad) Khoddam
%
% 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 个评论
sherwan Najm
sherwan Najm 2020-9-2
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

请先登录,再进行评论。

更多回答(1 个)

Asad (Mehrzad) Khoddam
%
% 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 个评论
sherwan Najm
sherwan Najm 2020-9-2
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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Workspace Variables and MAT-Files 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by