Ignore NaN and -9999 values
2 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
回答(2 个)
BN
2020-4-10
编辑:BN
2020-4-10
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 个评论
Steven Lord
2020-4-10
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.
Ameer Hamza
2020-4-10
编辑:Ameer Hamza
2020-4-10
% 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)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!