How can I delete data from a variable in a table?

How can I delete data from a variable in a table: For example,
I want to delete all rows that has 'Not Collected' under SampledDate.

4 commentaires

Rik
Rik le 23 Juil 2021
What have you tried?
dpb
dpb le 23 Juil 2021
NB: You can't delete the rows from only the 'SampledData' variable but all columns in the table...
Sorry for the incomplete information. I meant to say I want to delete the whole rows. Any row contains Not Collected under 'SampledData', I need the code to delete it!
This is what I did Rik, and it is working for me!
W = table2cell(TEST);
IndexW = find(contains(W(:,7), 'Not Collected'));
% I used (:,7) to locate the column instead of using its name!
TEST(IndexW,:)=[];

Connectez-vous pour commenter.

 Réponse acceptée

In fact, it is not viable to delete only rows as dpb stated.
Otherwise, if you'd like to remove all elements of specific rows, that can be done relatively easy, e.g.:
TAB(TAB.SampledDate=='Not Collected', :)=[];

8 commentaires

I tried this one. It gives me this error: Undefined function 'eq' for input arguments of type 'cell'.
dpb
dpb le 26 Juil 2021
Have to use cellfun on cell array returned by TAB.SampledDate, then.
W/o a dataset attached, we sorta' have to guess...
However, I'd suggest going back to the point at which you create the table by (I presume) reading a file and using the DetectImportOptions object and the 'MissingRule' value to 'omitrow' and 'TreatAsMissing' to 'Not Collected' and won't bring those records in in the first place.
Thank you so much for your help and input!
Waleed Nowayti
Waleed Nowayti le 2 Août 2021
Modifié(e) : Waleed Nowayti le 3 Août 2021
I had a problem using ==
Therefore, I changed the way for matlab to find what I am looking for.
W = table2cell(TEST);
IndexW = find(contains(W(:,7), 'Not Collected'));
% I used (:,7) to locate the column instead of using its name!
TEST(IndexW,:)=[];
It worked for me this way!
Thank you everyone for your help!
Stephen23
Stephen23 le 3 Août 2021
replace FIND & CONTAINS with STRCMP or STRCMPI.
I just tried it. It worked the same! Thank you so much for your input and help.
In general, what is the different between these two ways? Why is it giving the same output and will they be different outputs if they are used in a different code?
W = table2cell(TEST);
% IndexW = find(contains(W(:,7), 'Not Collected'));
IndexW = strcmp(W(:,7), 'Not Collected');
TEST(IndexW,:)=[];
"In general, what is the different between these two ways?"
One checks if the table data contains the required text, the other checks if the table data is the same as that text.
"Why is it giving the same output and will they be different outputs if they are used in a different code?"
Just like any functions, they will give different outputs depending on the input data:
A = 'cat in hat';
B = 'hat';
contains(A,B)
ans = logical
1
strcmp(A,B)
ans = logical
0
Only you (as your code's author) can decide which one suits your needs best.
That is amazing! I see the difference and your example is just straight to the point. Thank you so much for explaining!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by