2011-08-24 100 views
3

我有两列看起来如下数据:提取唯一值

 
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

是明确的:是逗号小数点? – Rasman

回答

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 
+0

谢谢!奇迹般有效 – Oscar