提取唯一值

时间:2011-08-24 14:52:16

标签: matlab uniqueidentifier

我的数据分为两列,如下所示:

A               B

1,265848208     3
-0,608043611    0
-0,285735893    0
0,006895134     7
0               7
-0,004526196    7
0,176326617     10
-0,159688071    2
0,22439945      2
-0,991045044    1
0,178022324     1
-0,270967397    4
0,285849994     4
1,881705539     23
1,057184204     10
NaN             10

对于B中的所有唯一值,我想提取A列中的相应值并将其移动到新矩阵。我希望然后计算A中所有相应值的平均值,并在回归中用作因变量(在B中每个值的观察值加权),其中B的公共值是减少噪声的自变量。在Matlab中如何做到这一点的任何帮助(运行回归除外)都会很棒!

由于

的奥斯卡

1 个答案:

答案 0 :(得分:5)

这是一个有效的解决方案:

X = [
    1.265848208     3
    -0.608043611    0
    -0.285735893    0
    0.006895134     7
    0               7
    -0.004526196    7
    0.176326617     10
    -0.159688071    2
    0.22439945      2
    -0.991045044    1
    0.178022324     1
    -0.270967397    4
    0.285849994     4
    1.881705539     23
    1.057184204     10
    NaN             10
];

%# unique values in B, and their indices
[valB,~,subs] = unique(X(:,2));

%# values of A for each unique number in B (cellarray)
valA = accumarray(subs, X(:,1), [], @(x) {x});

%# mean of each group
meanValA = cellfun(@nanmean, valA)

%# perform regression here...

结果:

%# B values, mean of corresponding values in A, number of A values
>> [valB meanValA cellfun(@numel,valA)]
ans =
            0     -0.44689            2
            1     -0.40651            2
            2     0.032356            2
            3       1.2658            1
            4    0.0074413            2
            7   0.00078965            3
           10      0.61676            3
           23       1.8817            1