index rows containing specific value

9 views (last 30 days)
Hello everyone
I've a cell 352X79. The first row contains the marker names. The first column contains the filenames.
Now i need to find all the NaN values and write the row containing the NaN to a new variable X, so I have all colums with NaN values in one variable.
Or is it even possible to get the filename and the names of the NaN marker into the new variable? So it woul look like X(1,1) = filname, X(1,2) = markar_Name etc.
Thanks for your help!
  4 Comments
Stephen23
Stephen23 on 26 Mar 2016
"I've a cell 352X79. The first row contains the marker names. The first column contains the filenames."
You would be much better off using a table.
Alternatively you could use a simple numeric array and two cell arrays (See my answer).
Oliver Kumar
Oliver Kumar on 26 Mar 2016
Hi Stephen
Ok, I have all the nummeric data also as a matrix. Column 1 has the numbers for marker1, Column2 for marker2, etc. So I could build a table out of that data. And I have a Cell with all the VPN.
What would be the next step after I've build the table? Thank you!

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 26 Mar 2016
Edited: Stephen23 on 26 Mar 2016
Using a cell array is a total waste of MATLAB's abilites for processing numeric arrays quickly and efficiently. You would be much better off storing the data in three arrays (col-names, row-names, numeric data), or (even better) in a table. Whatever method you use for processing a cell array of mixed data is going to be much more complicated that if you simply stored your numeric data in a numeric array.
Here is an example showing how simple this task can be when the data is stored in a simple numeric array:
colC = {'marker1',' marker2'};
rowC = {'testvpn1','testvpn2','testvpn3'};
mat = [5,NaN;1,0;6,NaN] % your data
[idxR,idxC] = find(isnan(mat))
[colC(idxC),rowC(idxR)]
  1 Comment
Oliver Kumar
Oliver Kumar on 26 Mar 2016
Edited: Oliver Kumar on 26 Mar 2016
hey, thanks a lot! I just changed the last line to [rowC(idxR);colC(idxC)], so I geht my VPN names in the first row.
colC = marker'; rowC = filenames_all'; mat = how_many_NaNs; [idxR,idxC] = find(isnan(mat)); NaN_mark = [rowC(idxR);colC(idxC)];
Now I get the error: Index exceeds matrix dimensions.
Error in NaN_marker (line 5) NaN_mark = [rowC(idxR);colC(idxC)]
I think because there are sometimes more then one NaN values for one filename.
The code worked if there is only one NaN value.
idxR and idxC are 215x1
Edit: It works! Thank you!

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!