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:



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 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
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

