# Mean value every 60 rows

43 views (last 30 days)
Tiago Dias on 22 Feb 2018
Answered: sura Naji on 25 Oct 2019
Hello, I got my table, with 180 rows and 2 columns, each column is a variable X1, X2. I want to have the mean of X1 60 rows in 60 rows, the same for X2. This is the result media =
60.1635
60.1523
60.1492
media =
513.0252
513.1533
513.1119
Question 1) How to store the results in a matrix or table 3x2 so I would have something like:
60.1635 513.0252
60.1523 513.1533
60.1492 513.1119
Question 2) For example if i wanted to make the average each 120 rows, what would I need to change? is just the "n" value? because i dont understand what does the "1" do in here
a = reshape(tabela(:,j),[],1);
Code is here:
n = 60
for j=1:2
a = reshape(tabela(:,j),[],1);
media = arrayfun(@(i) mean(tabela(i:i+n-1,j)),1:n:length(a)-n+1)'
end

Birdman on 22 Feb 2018
You need to do some tricks here. Firstly, your data is 181x2 and since 181 is not dividable by 60, I erased the last row to make it 180x2. Next do the following steps:
Tabela=mat2cell(tabela,60*ones(1,3),2)
Tabela_avg=cellfun(@(x) mean(x),Tabela,'uni',0)
and you will obtain the mean for each 60x2 data. You can reach all of them at once by typing
Tabela_avg{:}
If you want the first 120 rows, then you need to separate that as follows:
Tabela=mat2cell(tabela,[120 60],2)
since the sum of dimensions has to be equal to the initial size.

Tiago Dias on 22 Feb 2018
This does what i want, so thanks for your time and patience!!
A = cell2mat(Tabela_avg)
Tiago Dias on 22 Feb 2018
Sorry to bother again, but what does the 'uni' and '0' do?
Stephen Cobeldick on 22 Feb 2018
"what does the 'uni' and '0' do?"
These are short for 'UniformOutput' and false.
They tell cellfun to put the function outputs into a cell array and return this, which is useful in situations where the function outputs might not be uniform (i.e. are non-scalar). The default ('UniformOutput' = true) tells cellfun that the function outputs are scalar (so they can be joined together into an array the same size as the input cell arrays). See the cellfun help for more info.

KL on 22 Feb 2018
Edited: KL on 22 Feb 2018
Simpler:
No need to use loops/arrayfun or cellfun at all. Simpler solution is to use just reshape with mean,
cc = reshape(mean(reshape(dummy,n,[])),[],2)
cc =
60.1635 513.0252
60.1523 513.1533
60.1492 513.1119

Tiago Dias on 23 Feb 2018
in what u wrote I only see
cc = reshape(mean(reshape(dummy,n,[])),[],2)
so what is dummy?
KL on 23 Feb 2018
That's an example Tiago! You should replace dummy with your matrix.
Tiago Dias on 23 Feb 2018
OK, thanks !