MATLAB: I want fill NaN in one column using average of two other column but I got an error.

nan

Hey all, I want to fill all NaNs in the column named tm_m in the all tables that store in a 1 x 71 cell array named C using an average of the exact row of 2 other columns named tmax_m and tmin_m. I read the Matlab help and I thought this must work but it gave me an error:
for i=1:length(C)
if any(contains(C{i}.Properties.VariableNames,'tm_m'))
C{i}{C{i}{:,'tm_m'}=NaN, 'tm_m'} = mean([C.tmax_m(isnan(C.tm_m)), C.tmin_m(isnan(C.tm_m))],2);
end
end
the error is :
C{i}{C{i}{:,'tm_m'}=NaN, 'tm_m'} = mean([C.tmax_m(isnan(C.tm_m)), C.tmin_m(isnan(C.tm_m))],2);
Error: Incorrect use of '=' operator. To assign a value to a
variable, use '='. To compare values for equality, use '=='.
Thank you.

Best Answer

The comparison operator for equality is == not =, which is exclusively for assignment.
However, you need to be aware that a NaN is never equal to anything, or greater or smaller than anything meaning that:
NaN >= NaN
NaN <= NaN
NaN == NaN
are always false.
The proper way to check for NaN is with isnan.
Overall, I'd write your code as this:
for cidx = 1:numel(C)
if ismember('tm_m', C{cidx}.Properties.VariableNames)
toreplace = isnan(C{cidx}.tm_m);
C{cidx}.tm_m(toreplace) = mean(C{cidx}{toreplace, {'tmax_m', tmin_m}});
end
end
Assuming I've undestood your code correctly. In your snippet C appears to be first a cell array of tables, then a structure.