In table, how to select values in one column based on values in another column?

39 views (last 30 days)
As given in the title, I like to call values in one table based on values in anothe column. I have a follwoing table.
T = table({'a'; 'b'; 'c'; 'd'; 'e'}, [1;2;3;4;5], 'variablenames', {'name', 'value'});
I like to call elements in the 'value' column, for 'd', 'b', 'e' in the 'name' column. So the expected result is as below
result =
4.00
2.00
5.00
I can do this with the following codes.
order = {'d', 'b', 'e'};
[Lia, Locb] = ismember(T.name, order);
order_chosen = T.value(Lia);
Locb = nonzeros(Locb);
result = order_chosen(Locb);
However, as you can see, lines seem too many for such a relatively simple outcome. So I wonder if there is way to do the samething efficiently with shorter lines.
Thank you for any help in advance.

Accepted Answer

Cris LaPierre
Cris LaPierre on 17 Apr 2021
The simplest way to do this is using logical indexing, but that doesn't preserve the order. That makes it a more challenging problem to solve. Still, it can be done in fewer lines. I suggest using find.
T = table({'a'; 'b'; 'c'; 'd'; 'e'}, [1;2;3;4;5], 'variablenames', {'name', 'value'});
% Find rows corresponding to names, preserving order
[rows,~]=find(T.name==["d","b","e"]);
result = T(rows,"value")
result = 3×1 table
value _____ 4 2 5

More Answers (0)

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!