我的数据分为两列,如下所示:
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中如何做到这一点的任何帮助(运行回归除外)都会很棒!
由于
的奥斯卡
答案 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