Weighted mean by groups
조회 수: 6 (최근 30일)
이전 댓글 표시
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
채택된 답변
dpb
2022년 9월 28일
편집: dpb
2022년 9월 28일
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"})
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!