Using a loop with a cell array
1 view (last 30 days)
Show older comments
I have a big data set in excel. About 120,000 rows by 23 columns. I have used the read command to input this to Matlab and now want to go through each row in column 10 to search for user defined as unknown. Once it finds the unknown I want to delete the entire row. I'm new to Matlab and would appreciate the help. Here's what I've got:
>DataClean_ParkRun
>clc
>clear all
>[~,~,everything]=xlsread('File Wk1edited_Original.xlsx ');
>n=size(everything,1);
>b='unknown';
>for k=1:1:n;
> A{k}=everything{k,10};
> if A{k}==b;
> everything{k,:}=[];
> end
>end
0 Comments
Answers (1)
dpb
on 11 Jun 2017
Edited: dpb
on 12 Jun 2017
[~,~,raw]=xlsread('File Wk1edited_Original.xlsx ');
ix=cellfun(@isempty,strfind(raw(:,10),'unknown'));
raw(~ix,:)=[]; % get rid of those that are _not_ empty (do contain 'unknown')
2 Comments
dpb
on 12 Jun 2017
Well, ix is a logical vector where the the string is/isn't.
Oooh....I see I didn't get the negation operation in on the deletion row, however; the rows you want to remove are those that do not contain the 'unknown' string; that's the ones we eliminated above.
Use
raw(~ix)=[]; % instead
I think I recall I started to write
raw=raw(ix,:);
and then switched to delete instead of copy and didn't swap the logical. I'll update the Answer to coincide.
If there's still an issue, attach a short section of the file we can see...
See Also
Categories
Find more on Matrix Indexing 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!