2017-10-05 42 views
0

我正在嘗試在MATLAB中平均複製數據並且遇到一些困難。變量是depthVar1,Var2。有時在Var1中有重複,有時在Var2中有重複,有時對於給定的depth,有Var1Var2的重複。因此,矩陣可能是這個樣子:在Matlab中平均複製數據,多個變量

1 0.2 1, 
2 0.5 3, 
2 0.7 NaN, 
3 0.1 5, 
3 0.7 6, 
4 0.3 4, 
... 

depth是唯一的標識符,所以我想創建一個矩陣[depth, Var1, Var2]看起來像這樣:

1 0.2 1, 
2 0.6 3, 
3 0.4 5.5, 
4 0.3 4, 
... 

功能accumarray會,如果工作,我有一個n乘2的矩陣,但這是n乘3。有關如何繼續的建議?

回答

0

這應該工作

a=[1 0.2 1; 2 0.5 3; 2 0.7 NaN; 3 0.1 5; 3 0.7 6; 4 0.3 4]; 
depths = unique(a(:,1)); 
b=nan(length(depths),3); 
for ct = 1:length(depths) 
    b(ct,:)=mean(a(a(:,1)==depths(ct),:),1,'omitnan'); 
end 

結果

b = 

    1.0000 0.2000 1.0000 
    2.0000 0.6000 3.0000 
    3.0000 0.4000 5.5000 
    4.0000 0.3000 4.0000 
+0

太棒了!非常感謝! –

0

有點幼稚實現與accumarray它遍歷的變量。

A = [1 0.2 1 
2 0.5 3 
2 0.7 NaN 
3 0.1 5 
3 0.7 6 
4 0.3 4]; 

result = zeros([numel(unique(A(:,1))) size(A,2)]); 
result(:,1) = unique(A(:,1)); 
for ii = 2:size(A,2) 
    result(:,ii) = accumarray(A(:,1),A(:,ii),[],@mean); 
end 
+0

也不錯!謝謝! –