2017-10-05 2 views
0

J'essaie de calculer la moyenne des données répliquées dans MATLAB et de rencontrer des difficultés. Les variables sont depth, Var1, Var2. Parfois il y a une réplique dans Var1, parfois il y a une réplique dans Var2, parfois il y a une réplique à la fois pour Var1 et Var2 pour depth donné. Ainsi, la matrice pourrait ressembler à ceci:Étalement des données répliquées dans Matlab, variables multiples

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 est l'identifiant unique, donc je voudrais créer une matrice avec [depth, Var1, Var2] qui ressemble à ceci:

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

La fonction accumarray fonctionnerait si je avait une matrice n-by-2, mais c'est n-by-3. Des recommandations sur la façon de procéder?

Répondre

0

Cela devrait fonctionner

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 

résultat

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

Wonderful! Merci beaucoup! –

0

Un peu naïve avec la mise en œuvre accumarray qui passe en boucle sur les variables.

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

Aussi bien! Je vous remercie! –