如何将AVERAGEIFS功能转换为MATLAB?

时间:2017-02-28 01:34:26

标签: excel matlab if-statement matrix average

我正在努力将我的数据从Excel移动到Matlab。我有一些我希望根据多个标准进行平均的数据。我可以通过循环完成此操作,但是如果可能的话,只想使用矩阵运算。

到目前为止,我已经设法使用一个标准,使用accumarray如下:

data=[
    1 3
    1 3
    1 3
    2 3
    2 6
    2 9];

accumarray(data(:,1),data(:,2))./accumarray(data(:,1),1);

返回:

3
6

分别对应项目12的平均值。我至少有三个其他列需要包含在这个平均值中但不知道如何添加它。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

对于您的单列,您无需再调用accumarray两次,您可以提供mean的函数句柄作为第四个输入

mu = accumarray(data(:,1), data(:,2), [], @mean);

对于多列,您可以使用行索引作为accumarray的第二个输入,然后使用匿名函数中的那些来访问要操作的数据行。

data = [1  3  5
        1  3  10
        1  3  8
        2  3  7
        2  6  9
        2  9  12];

tmp = accumarray(data(:,1), 1:size(data, 1), [], @(rows){mean(data(rows,2:end), 1)});
means = cat(1, tmp{:});
%   3.0000   7.6667
%   6.0000   9.3333