Azzera filtri
Azzera filtri

Ignore NaN and -9999 values

3 visualizzazioni (ultimi 30 giorni)
SuzieChan
SuzieChan il 10 Apr 2020
Commentato: BN il 10 Apr 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.

Risposte (2)

BN
BN il 10 Apr 2020
Modificato: BN il 10 Apr 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 Commenti
Steven Lord
Steven Lord il 10 Apr 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 il 10 Apr 2020
Thank you for let me know.

Accedi per commentare.


Ameer Hamza
Ameer Hamza il 10 Apr 2020
Modificato: Ameer Hamza il 10 Apr 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)

Categorie

Scopri di più su Data Type Conversion in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by