Directly perform a multiplication on certain variables in a table
16 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Stephen23
2021-11-25
编辑:Stephen23
2021-11-25
T = cell2table({'a',1,2;'b',3,4;'a',5,6},'VariableNames',{'x','y','z'})
idx = strcmp(T.x,'b');
T{idx,{'y','z'}} = T{idx,{'y','z'}}*1000
Or alternatively:
T.y(idx) = T.y(idx)*1000;
T.z(idx) = T.z(idx)*1000;
1 个评论
Peter Perkins
2021-11-26
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"
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!