How to find NaN in a matrix and delete it?

8 views (last 30 days)
Hello,
I've got a large matrix and for two columns I need to find the NaNs and to delete them. I need to delete them in the MarketCapY column and the DebtEquityY column.
Below, you find the code that is already written.
for i=1:28
EquityY= equity (:,i);
TotalDebtY= TotalDebt (:,i);
MarketCapY= MarketCap (:,12*i+1:12*(i+1)+1);
TotalReturnY = TotalReturn (:,12*i+1:12*(i+1)+1);
DebtEquityY= TotalDebtY./EquityY;
DataY= [DebtEquityY MarketCapY TotalReturnY];
[row,col] = find(isnan(MarketCapY));
out = DataY(any(~isnan(MarketCapY),2),:)
[row, col] = find(isnan(DebtEquityY));
out = DataY(any(~isnan(DebtEquityY),2),:);
You can see that the first two columns of DataY must be eliminated. I already tried something, but I don't know if it's correct.
  3 Comments
Alyssa Gailliaert
Alyssa Gailliaert on 26 Dec 2018
The file is to big to attach. The purpose of my code is to determine whether or not a debt/equity ratio influences the height of stock returns of Belgian companies. So I still need the two columns to determine that. I tried this: a(isnan(a))=[] and I think it worked!
Image Analyst
Image Analyst on 26 Dec 2018
That wouldn't work for a matrix, but would for a vector. If DebtEquityY, MarketCapY, and TotalReturnY are all vectors, and they all have nan's in the same position, that would work. If they have nan's in different locations then you'll have to use any() on DataY matrix, like Star Strider showed below. Maybe you could at least vote for the answers below or accept the best one to give them reputation points.

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 26 Dec 2018
You have the logical negation ‘~’ in the incorrect position.
Example —
A = rand(4);
A(2,3) = NaN;
A(3,4) = NaN
Q1 = ~(any(isnan(A),1))
Q2 = ~(any(isnan(A),2))
Out1 = A(:,~any(isnan(A),1)) % Select Columns
Out2 = A(~any(isnan(A),2),:) % Select Rows
You also need to be certain that you are selecting columns or rows.
  5 Comments
Alyssa Gailliaert
Alyssa Gailliaert on 28 Dec 2018
The matrix looks like this
[DebtEquityY MarketCapY TotalreturnY]
DebtEquityY and MarketCapY are both one column with NaN
TotalReturnY contains 13 columns in the matrix
The purpose is that I have to get out the NaNs in DebtEquityY and MarketCapY in order to calculate the stock returns of my Belgian dataset.
Star Strider
Star Strider on 28 Dec 2018
I am slightly confused with respect to your data set, and what you want to do with it.
I assume this is your ‘DataY’ matrix:
DataY = [DebtEquityY MarketCapY TotalreturnY];
and ‘DataY’ is therefore an (Nx15) matrix, and you apparently want to delete the rows where either the first or second columns have NaN elements. If so, this will probably work:
out = DataY(~any(isnan(DataY(:,[1 2])),2),:)

Sign in to comment.

More Answers (1)

madhan ravi
madhan ravi on 26 Dec 2018
a=[1 2 3 NaN]; %an example
a(isnan(a))=[]

Categories

Find more on Operators and Elementary Operations in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!