# Directly perform a multiplication on certain variables in a table

17 views (last 30 days)
James Browne on 25 Nov 2021
Commented: Peter Perkins on 26 Nov 2021
Hi,
I have a table such as
x y z
a 1 2
b 3 4
a 5 6
I want to multiply rows where the first column = b by 1000 but not touch the other rows.
I know I can get the values using a logical operatior
table.x == "b"
but I wasn't sure if I can use this logical operation to multiply the rows in place on the table without touching the other rows, without doing a for loop. My table has a lot of data so a for loop through each row is quite slow. Hence I am looking for a faster way than:
for i = 1:3
if table.x(i) == "b"
table.y(i)=table.y(i)*1000;
table.z(i)=table.z(i)*1000;
else
% do nothing
end
end

Stephen23 on 25 Nov 2021
Edited: Stephen23 on 25 Nov 2021
T = cell2table({'a',1,2;'b',3,4;'a',5,6},'VariableNames',{'x','y','z'})
T = 3×3 table
x y z _____ _ _ {'a'} 1 2 {'b'} 3 4 {'a'} 5 6
idx = strcmp(T.x,'b');
T{idx,{'y','z'}} = T{idx,{'y','z'}}*1000
T = 3×3 table
x y z _____ ____ ____ {'a'} 1 2 {'b'} 3000 4000 {'a'} 5 6
Or alternatively:
T.y(idx) = T.y(idx)*1000;
T.z(idx) = T.z(idx)*1000;
##### 1 CommentShowHide None
Peter Perkins on 26 Nov 2021
Even better if you can use the string type rather than a cell array of char vectors, because then
idx = strcmp(T.x,'b');
becomes the more readable
T.x == "b"

### Community Treasure Hunt

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

Start Hunting!