MatLab: Average (column,row) entry across many different files -> create output file

7 views (last 30 days)
Hi there,
I have many files with an".IV0" ending (this is something similiar to .txt). In each file I have an header of 15 rows. This header should not be aken into account. After the header there are 3 columns (seperated by " " and about 81 rows). What I want to do now is to average e.g. row "16" column "1" of each .IV0 file and make an outputfile, which has 3 columns and about 81 rows and in each (row, column) is the average of all the same (row, column) elements from all the different files.
I have tried what you have said, but don´t really know what to do anymore...Can you help me? This is the code I tried:
folder = 'C:\Users\Averager\';
IV0Files = dir(fullfile(folder, '*.IV0')); % Use absolute path names
numfiles = length(IV0Files);
average1 = zeros(1, numfiles);
average2 = zeros(1, numfiles);
average3 = zeros(1, numfiles);
for k = 1:numfiles
M = csvread(fullfile(folder, IV0Files(k).name));
average1(k) = mean(M(:,1));
%average2(k) = mean(M(:,8));
end
iv0write(fullfile(folder, 'output.IV0'), average1);
  2 Comments
Simon Keegan
Simon Keegan on 10 Dec 2020
Edited: Simon Keegan on 10 Dec 2020
Hi Mathieu,
yes I do have some data (attached). I had to convert them to a txt file in order to upload it. It shouldn´t make a difference, if it is a .IV0 file or a .txt file in the end. i guess.
I already worked on it again and created this:
folder = 'C:\Users\Averager\';
folderout = 'C:\Users\Auswertung\';
IV0Files = dir(fullfile(folder, '*.IV0')); % Use absolute path names
numfiles = length(IV0Files);
%the following should be automatic. I did it manual for two examples to see if it is working in general
M = load(IV0Files(1).name);
A = load(IV0Files(2).name);
average = (M+A)/numfiles;
%this is to save the data in the new IV0 file
iv0write(fullfile(folderout, 'output.IV0'), average);

Sign in to comment.

Accepted Answer

Mathieu NOE
Mathieu NOE on 11 Dec 2020
So this is my suggestion
I wonder why we need to average also the 3rd column with is the time values ?? making not much sense IMHO
IV0Files = dir(fullfile(folder, '*.txt')); % Use absolute path names
numfiles = length(IV0Files);
data_sum = 0;
for ci = 1:numfiles
data_file = readmatrix(IV0Files(ci).name,'NumHeaderLines',15);
data_sum = data_sum+data_file; % summation accross the files
end
% divide by numfiles to have the average (and not the sum)
average = data_sum/numfiles;
% %this is to save the data in the new IV0 file
writematrix(average, fullfile(folderout, 'output.txt'))
  4 Comments

Sign in to comment.

More Answers (0)

Categories

Find more on Cell Arrays in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!