Aggregate multiple CSV files as an average for each cell individually and result in one CSV file.
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
sherwan Najm
am 1 Sep. 2020
Kommentiert: sherwan Najm
am 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:



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
0 Kommentare
Akzeptierte Antwort
Asad (Mehrzad) Khoddam
am 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 Kommentare
Weitere Antworten (1)
Asad (Mehrzad) Khoddam
am 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
%
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
