Select columns of a table using matching column names

Hello everyone!
I'm facing the following problem: I have a cell array containing strings, let's call it "v"
On the other hand I have a huge table , let's call it "T", from which I want to select only the columns that have the column name that corresponds to the names contained in vector "v".
Any kind of help will be appreciated
Thank you

 Réponse acceptée

v = {'Var1' 'Var3'}
v = 1×2 cell array
{'Var1'} {'Var3'}
T = table([1;2;3],[4;5;6],[7;8;9])
T = 3×3 table
Var1 Var2 Var3 ____ ____ ____ 1 4 7 2 5 8 3 6 9
% a table of the selected columns of T:
new_T = T(:,v)
new_T = 3×2 table
Var1 Var3 ____ ____ 1 7 2 8 3 9
% or, the data from the selected columns of T:
new_T_data = T{:,v}
new_T_data = 3×2
1 7 2 8 3 9

2 commentaires

It worked, thank you! And what if not all the elements in v are present as column names in T?
If not all elements of v are column names of T, you can use ismember to get just the elements of v that do correspond to column names of T:
v = {'Var1' 'Var3' 'Var4'}
v = 1×3 cell array
{'Var1'} {'Var3'} {'Var4'}
T = table([1;2;3],[4;5;6],[7;8;9])
T = 3×3 table
Var1 Var2 Var3 ____ ____ ____ 1 4 7 2 5 8 3 6 9
v_to_use = v(ismember(v,T.Properties.VariableNames))
v_to_use = 1×2 cell array
{'Var1'} {'Var3'}
And use that the same as v was used before:
new_T = T(:,v_to_use)
new_T = 3×2 table
Var1 Var3 ____ ____ 1 7 2 8 3 9
new_T_data = T{:,v_to_use}
new_T_data = 3×2
1 7 2 8 3 9

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Produits

Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by