Weighted mean by groups
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Maximilian Schwarz
am 28 Sep. 2022
Bearbeitet: dpb
am 28 Sep. 2022
I am trying to get the weighted mean of values by group id but I don't undersnatnd why my ouput (Mean) is a matrix and not a vector.
id = { 'a'; 'a'; 'b'; 'b'; 'c'; 'c'};
values = [1;2;3;4;5;6];
weights = [0.5;0.7;0.3;0.4;0.5;0.1];
exampletable = table(id, weights, values);
G = findgroups(exampletable.id);
wmean = @(w,v)w'.*mean(v);
Mean = splitapply(wmean, exampletable.weights, exampletable.values, G)
id = { 'a'; 'a'; 'b'; 'b'; 'c'; 'c'};
values = [1;2;3;4;5;6];
weights = [0.5;0.7;0.3;0.4;0.5;0.1];
exampletable = table(id, weights, values);
G = findgroups(exampletable.id);
wmean = @(w,v)w'.*mean(v);
Mean = splitapply(wmean, exampletable.weights, exampletable.values, G)
0 Kommentare
Akzeptierte Antwort
dpb
am 28 Sep. 2022
Bearbeitet: dpb
am 28 Sep. 2022
It's the wmean function definition that's doing it -- what you intended was
wmean = @(w,v)mean(w.*v);
trying that,
id = { 'a'; 'a'; 'b'; 'b'; 'c'; 'c'};
values = [1;2;3;4;5;6];
weights = [0.5;0.7;0.3;0.4;0.5;0.1];
exampletable = table(id, weights, values);
G = findgroups(exampletable.id);
Mean = splitapply(wmean, exampletable.weights, exampletable.values, G)
ADDENDUM
OBTW, you can do things like this without the explicit step of findgroups with groupsummary (or several other ways, as well)--
gmeans=groupsummary(exampletable,'id',wmean,{"weights","values"})
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Descriptive Statistics and Visualization finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!