Subtract one column from another unless NaN
Afficher commentaires plus anciens
I have a 100x4 double (data) with various NaN values throughout.
345 123 546 864
183 152 NaN NaN
842 NaN 238 945
NaN 283 965 NaN
392 105 932 NaN...
...
I am trying to subtract the first time point (that's not a NaN) from the last time point (that's not a NaN).
Here is the code I am using. It not only does not work, but makes me think there has to be an easier/more efficient manner of solving this.
for i = 1:100
if isreal(data(i,4))
if isreal(data(i,1))
FirstMinusLast(i) = data(i,1) - data(i,4);
elseif isreal(data(i,2))
FirstMinusLast(i) = data(i,2) - data(i,4);
elseif isreal(data(i,3))
FirstMinusLast(i) = data(i,3) - data(i,4);
else
FirstMinusLast(i) = 'N/a';
end
elseif isreal(data(i,3))
if isreal(data(i,1))
FirstMinusLast(i) = data(i,1) - data(i,3);
elseif isreal(data(i,2))
FirstMinusLast(i) = data(i,2) - data(i,3);
else
FirstMinusLast(i) = 'N/a';
end
elseif isreal(data(i,2))
if isreal(data(i,1))
FirstMinusLast(i) = data(i,1) - data(i,2);
else
FirstMinusLast(i)= 'N/a';
end
end
end
2 commentaires
Totanly
le 8 Jan 2019
You mean A(:,1)-A(:,4) excluding NaN?
Carver Nabb
le 8 Jan 2019
Réponses (3)
madhan ravi
le 8 Jan 2019
help isnan
Totanly
le 8 Jan 2019
Modifié(e) : madhan ravi
le 8 Jan 2019
c1=1 %or 2;
c2=3 %or 4
FirstMinusLast=data(:,c1)-data(:,c2); %if any NaN is there it will give NaN
data1=data(data>0);
Totanly
le 2 Août 2020
0 votes
A=[345 123 546 864
183 152 NaN NaN
842 NaN 238 945
NaN 283 965 NaN
392 105 932 NaN]; %or make your own matrix
i=A>0;
A_new=A(i);
result=A_new(1)-A_new(length(A_new));
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!