代码之家  ›  专栏  ›  技术社区  ›  Ahmad

如何获取按某列分组的列的平均值?

  •  0
  • Ahmad  · 技术社区  · 7 年前

    在matlab中考虑以下矩阵:

          %  x y z  V
    data = [ 1 1 1  6
             1 1 2  7
             1 1 3  8
             1 2 1  6
             1 2 2  7
             1 2 3  9
             1 3 1  6
             1 3 2  4
             1 3 3  8
             2 1 1  9
             2 1 2  8]
    

    我怎么才能拿到( V 虚拟 z )通过对适当的 x y 是吗?

    在这种情况下,结果应该是:

    B = [1, (6+6+6+9)/4); 
         2, (7+7+4+8)/4); 
         3,   (8+9+9)/3 ]
    

    平均值是全部 有相同的 Z .

    但是,原始数据包含实际值:

    0.815210000000000   1.30799000000000    -84.8230000000000   -5.90987000000000
    0.815210000000000   2.42194000000000    -84.8230000000000   -0.236048000000000
    0.815210000000000   3.53589000000000    -84.8230000000000   3.19780000000000
    0.815210000000000   4.64984000000000    -84.8230000000000   5.48969000000000
    0.815210000000000   5.76379000000000    -84.8230000000000   6.42475000000000
    0.815210000000000   6.87774000000000    -84.8230000000000   5.97255000000000
    0.815210000000000   7.99169000000000    -84.8230000000000   4.25794000000000
    0.815210000000000   9.10564000000000    -84.8230000000000   1.49070000000000
    0.815210000000000   10.2196000000000    -84.8230000000000   -2.10373000000000
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Sardar Usama    7 年前

    使用 accumarray 找出各组的平均值。在…前加一列 unique 要获取的第3列的值 B .

    [C, ~, ic]=  unique(data(:,3));
    B = [C  accumarray(ic,data(:,4),[],@mean)]
    

    如果第三列的值不是 真正地 完全相同,然后使用 uniquetol 相反。

        2
  •  0
  •   Ahmad    7 年前

    我用我的编程知识和其他语言解决了这个问题:

    A = sortrows(data, 3);
    G = unique(A(:, 3));
    n = size(G,1);
    num = size(A,1);
    B = zeros(n,2);
    i =1;
    oldZ=A(1,3);
    sum = 0;
    m =0;
    for row=1:num
        z = A(row,3);
        if z ~= oldZ
            B(i,1) =oldZ;
            B(i,2)= sum/m;
            sum = 0;
            m =0;
            oldZ = z;
            i = i+1;
        end
        V = A(row,4);
        sum = sum + V;
        m = m +1;
    end
    
    B(i,1) =oldZ;
    B(i,2)= sum/m;
    

    b是要求的外形,这是沿z的xy平面的平均值。