In table, how to select values in one column based on values in another column?
39 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Doheon Lee
il 17 Apr 2021
Commentato: Doheon Lee
il 20 Apr 2021
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.
0 Commenti
Risposta accettata
Cris LaPierre
il 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")
Più risposte (0)
Vedere anche
Categorie
Scopri di più su LaTeX in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!