Function similar to MS Excel "subtotal"?
1 次查看(过去 30 天)
显示 更早的评论
I have a 150x2 matrix in which the first column contains numbers that can be considered 'grouping variables' and the second column contains values associated with those grouping variables. So a small 5x2 version would look like this
1 23
1 29
1 43
2 38
2 22
I'd like to average the values associated with each grouping variable. So the above example would yield an average of 31.67 (for variable 1) and 30 (for variable 2). In Excel this can be achieved using Data --> "Subtotals". Does anybody know of a similar function or method to achieve this in Matlab?
Thanks
0 个评论
回答(3 个)
Titus Edelhofer
2011-11-2
Hi George,
I don't know a single function, but the functionality is not difficult to achieve:
x = [1 23; 1 29; 1 43; 2 38; 2 22]
% find the different indices:
id = unique(x(:,1));
subTotals = zeros(size(id));
for i=1:numel(id)
subTotals(i) = mean(x(id==id(i), 2));
end
Titus
0 个评论
George
2011-11-2
1 个评论
Titus Edelhofer
2011-11-3
Hi George,
yes of course! My code accidently worked because for the example vals and id are the same ...
Titus
Kelly Kearney
2011-11-2
If your grouping variable includes only integers, then
x = [...
1 23
1 29
1 43
2 38
2 22];
subtot = accumarray(x(:,1), x(:,2), [], @mean);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!