# Loop through multiple columns in table using if condition

8 views (last 30 days)
YaaW on 6 Jan 2023
Commented: YaaW on 6 Jan 2023
I have a large table, let's call it X, with many rows and columns. I want to loop through 10 columns (named X.A, X.B, X.C, etc.), and when all of the 10 columns for a specific row have the value NaN, I want a 0 in the column X.result, and when at least one or more of the columns has a value (an integer), I want it to return a 1 in the column X.result.
I tried to create this with looping through 1 column first and add more after, but I can't seem to manage it to work:
for i = 1:length(X.result)
if (~isnan((X.A)))
X.result(i) = 1;
end
end
I think I might be doing something wrong in defining variables but I can't seem to figure it out. The first line after the if statement ( if (~isnan((X.A))) ) works, but no 0 or 1 is assigned to the X.result column. Can anybody help me with this? Thanks!

VBBV on 6 Jan 2023
X.A = [randi([0 10],1,7) NaN]
X = struct with fields:
A: [2 10 7 7 3 4 8 NaN]
X.B = repmat(NaN,1,8);
for i = 1:length(X.A)
if (isnan(X.A(i)) & isnan(X.B(i)))
X.result(i) = 0;
elseif ~isnan(X.A(i)) | ~isnan(X.B(i))
X.result(i) = 1;
end
end
[X.A.', X.B.', X.result.']
ans = 8×3
2 NaN 1 10 NaN 1 7 NaN 1 7 NaN 1 3 NaN 1 4 NaN 1 8 NaN 1 NaN NaN 0
VBBV on 6 Jan 2023
extend the condition /check you have inside the loop, upto 10 columns as
if (isnan(X.A(i)) & isnan(X.B(i))) & isnan(X.C(i)) ... so on
YaaW on 6 Jan 2023
Thanks! Keep forgetting to put the (i) behind the variable :)