Compute different length mean when cell equals number
1 view (last 30 days)
Show older comments
I need to compute the mean of "x" number of rows in a column of data when a cell in another column is repeated. For example: I have the 2 columns of data:
A = (23, 23, 24, 25, 25, 25, 26, 26, 27, 27, 27, 27) and
B = ( 42, 43, 44, 38, 35, 36, 32, 28, 45, 46, 38, 29).
If a number repeats in "A" I need to get the mean of the value in the same row from "B". If it does not repeat, then the mean can just be the single number. An example output would be the mean in each cell like so:
Output = 42.5, 42.5, 44, 36.3, 36.3, 36.3, 30, 39.5, 39.5, 39.5, 39.5).
I have tried doing this with a while loop, but I'm relatively new to Matlab and haven't had much luck.
1 Comment
Geoff Hayes
on 13 Oct 2016
Tyler - is it safe to assume that the elements of A are ordered like the above such that all identical numbers are grouped together?
Accepted Answer
Mostafa
on 13 Oct 2016
Arr1 = [23, 23, 24, 25, 25, 25, 26, 26, 27, 27, 27, 27];
Arr2 = [42, 43, 44, 38, 35, 36, 32, 28, 45, 46, 38, 29];
uniArr1 = unique(Arr1);
for idx = 1:length(uniArr1)
Arr2(Arr1 == uniArr1(idx)) = mean(Arr2(Arr1 == uniArr1(idx)));
end
First, you extract the unique elements from the first array (basically the same elements without repeating any of them). Then you compare them to the original array, which gives you the indicies where they exist. You then take the elements from the second array as per these indicies, and equate them to their mean.
Expanded version:
uniArr1 = unique(Arr1);
for idx = 1:length(uniArr1)
indicies = (Arr1 == uniArr1(idx));
meanvalue = mean(Arr2(indicies));
Arr2(indicies) = meanvalue ;
end
More Answers (0)
See Also
Categories
Find more on Hypothesis Testing 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!