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

23 次查看(过去 30 天)
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.

采纳的回答

Cris LaPierre
Cris LaPierre 2021-4-17
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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Distribution Plots 的更多信息

标签

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by