Subtract one column from another unless NaN

7 次查看(过去 30 天)
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 个评论
Carver Nabb
Carver Nabb 2019-1-8
Yes, unless A(i,1) is NaN, then i would like to do A(i,2)-A(i,4). Assuming A(i,2) is real.

请先登录,再进行评论。

回答(3 个)

madhan ravi
madhan ravi 2019-1-8

Totanly
Totanly 2019-1-8
编辑:madhan ravi 2019-1-8
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
Totanly 2020-8-2
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));

类别

Help CenterFile Exchange 中查找有关 NaNs 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by