Exclude rows from table if multiple conditions are met

10 views (last 30 days)
Hi,
I have a table with many columns and rows (long list of patients that have had many questionnaires). I want to exclude patients that haven't filled in any of 5 questionnaires, but want to keep them if they have filled in all or for example only 1 of them. I tried it with an if loop, but I get the error 'Conversion to logical form from table is not possible.'
For example for the following table
A B C D E
1 NaN NaN NaN 4 NaN
2 NaN NaN NaN NaN NaN
3 8 6 9 3 5
4 4 8 NaN 5 4
5 NaN NaN NaN NaN NaN
6 NaN 3 2 NaN NaN
I want to exclude rows 2 and 5 since all questionnaires are not filled in but keep the rest, including the rows with only a few filled-in questionnaires.
I tried it with an if loop (if all 5 questionnaires are not NaN, then keep the rows, otherwise delete them), but then got the error as written above.
Anyone know how to do this? Thanks!

Accepted Answer

Kevin Holly
Kevin Holly on 21 Jul 2022
m = [1 NaN NaN NaN 4 NaN
2 NaN NaN NaN NaN NaN
3 8 6 9 3 5
4 4 8 NaN 5 4
5 NaN NaN NaN NaN NaN
6 NaN 3 2 NaN NaN]
m = 6×6
1 NaN NaN NaN 4 NaN 2 NaN NaN NaN NaN NaN 3 8 6 9 3 5 4 4 8 NaN 5 4 5 NaN NaN NaN NaN NaN 6 NaN 3 2 NaN NaN
rmmissing(m,'MinNumMissing',5)
ans = 4×6
1 NaN NaN NaN 4 NaN 3 8 6 9 3 5 4 4 8 NaN 5 4 6 NaN 3 2 NaN NaN
  4 Comments
Kevin Holly
Kevin Holly on 21 Jul 2022
Yes, please see below
t = [NaN NaN NaN 4 NaN
NaN NaN NaN NaN NaN
8 6 9 3 5
4 8 NaN 5 4
NaN NaN NaN NaN NaN
NaN 3 2 NaN NaN];
t=array2table(t)
t = 6×5 table
t1 t2 t3 t4 t5 ___ ___ ___ ___ ___ NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN 8 6 9 3 5 4 8 NaN 5 4 NaN NaN NaN NaN NaN NaN 3 2 NaN NaN
t.Properties.VariableNames = {'A' 'B' 'C' 'D' 'E'};
new_t = rmmissing(t,'MinNumMissing',3,'DataVariables',["A" "B" "C"])
new_t = 3×5 table
A B C D E ___ _ ___ ___ ___ 8 6 9 3 5 4 8 NaN 5 4 NaN 3 2 NaN NaN

Sign in to comment.

More Answers (1)

Matt J
Matt J on 21 Jul 2022
A=randi(5,5); A(A<=4)=nan
A = 5×5
NaN NaN NaN NaN NaN 5 NaN NaN NaN 5 NaN NaN NaN NaN NaN NaN 5 NaN NaN 5 NaN NaN NaN 5 NaN
A(all(isnan(A),2),:)=[]
A = 3×5
5 NaN NaN NaN 5 NaN 5 NaN NaN 5 NaN NaN NaN 5 NaN

Categories

Find more on Tables 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!