how to do a conditionnal mean
1 view (last 30 days)
Show older comments
alex monjambo
on 23 Sep 2014
Commented: alex monjambo
on 23 Sep 2014
Hi all,
I have many variables in a dataset.
One of them is called : FYEAR and another one is called : DY
I would like to find the mean of DY for each FYEAR and plot them.
Is there anyway i could do this ? can i do it with a boucle (IF for example ) ?
Thanks.
2 Comments
Accepted Answer
the cyclist
on 23 Sep 2014
You can use accumarray() to do this:
FYEAR = [2001; 2001; 2002; 2002];
DY = [1; 2; 5; 6];
[uniqueYear,i,j] = unique(FYEAR);
meanDY = accumarray(j,DY,[],@mean)
uniqueYear is the list of years in your list, and meanDY is the mean values.
There are many way to plot them. Here is a simple one:
plot(uniqueYear,meanDY,'.-')
More Answers (2)
Jos (10584)
on 23 Sep 2014
Something along these lines should work (assuming FYEAR and DY are numerical arrays)
FYEAR = [10 10 11 12 11 10 12 12 10]
DY = [ 1 3 4 8 6 2 10 9 2]
[UniqueFYEAR,~,i] = unique(FYEAR,'stable')
MeanDY = accumarray(k,DY,[],@mean)
plot(UniqueFYEAR, MeanDY, 'bo')
0 Comments
Matt J
on 23 Sep 2014
Edited: Matt J
on 23 Sep 2014
Here is yet another accumarray-based approach, but avoids a call to unique(), and also uses a faster 2-pass calculation,
FYEAR = [10 10 11 12 11 10 12 12 10];
DY = [ 1 3 4 8 6 2 10 9 2];
counts=accumarray(FYEAR(:),1)
sums=accumarray(FYEAR(:),DY(:));
idx=logical(counts);
means(idx)=sums(idx)./counts(idx);
0 Comments
See Also
Categories
Find more on Visual Exploration in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!