Ignore NaN and -9999 values

5 vues (au cours des 30 derniers jours)
SuzieChan
SuzieChan le 10 Avr 2020
Commenté : BN le 10 Avr 2020
Hi,
I have a table of data. There are 5 columns. 2000 rows.
Some data has NaN, 0 and -9999 values.
I want to calculate the average of each column, ignoring NaN, 0 and -9999 values.
What code can do this?
Thank you.

Réponses (2)

BN
BN le 10 Avr 2020
Modifié(e) : BN le 10 Avr 2020
Hi, It should be something like this, I learned it yesterday.
I assume T is the name of your table:
T_new = standardizeMissing(T, 0);
T_new = standardizeMissing(T_new, -9999)
A = T_new(:,vartype('numeric'));
omean = @(x) mean(x,'omitnan'); %ignoring NaN
mean_values = varfun(omean,A)
  2 commentaires
Steven Lord
Steven Lord le 10 Avr 2020
You don't need to call standardizeMissing twice. It accepts a vector of values that should be converted to the standard missing value (which is NaN for double precision arrays.) Using a slightly modified version of the first example from its documentation page:
A = [0 1 5 -99 8 3 4 -99 16];
B = standardizeMissing(A,[-99, 0]);
beforeAndAfter = [A; B]
The 0 and the two -99 values in A were replaced by NaN in B.
BN
BN le 10 Avr 2020
Thank you for let me know.

Connectez-vous pour commenter.


Ameer Hamza
Ameer Hamza le 10 Avr 2020
Modifié(e) : Ameer Hamza le 10 Avr 2020
% generting an example table
t = [1 2 3 4 5;
0 2 1 3 -9999;
-9999 5 7 0 9;
nan 1 2 3 -9999];
T = array2table(t);
values = T.Variables;
mask = isnan(values) | values==0 | values==-9999;
values(mask) = nan;
result = nanmean(values, 1)
  1 commentaire
BN
BN le 10 Avr 2020
+1

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by