strcmp with or-condition
Show older comments
Hello,
i have the following two tables:
Tab1=table('Size',[9 3],'VariableTypes',{'cell','double','double'},'VariableNames',{'Description','Year','Value'});
Tab1.Description(:)={'Gas','Gas','Gas','Pellets','Pellets','Pellets','Oil','Oil','Oil'};
Tab1.Year(:)=[2015,2020,2025,2015,2020,2025,2015,2020,2025];
Tab2=table('Size',[6 3],'VariableTypes',{'cell','double','double'},'VariableNames',{'Description','Year','Value'});
Tab2.Description(:)={'Wood','Wood','Wood','FW','FW','FW'};
Tab2.Year(:)=[2015,2020,2025,2015,2020,2025];
Tab2.Value(:)=[5,10,17,7,25,75];
I try the following calculation:
Tab1(strcmp(Tab1.Description,or('Gas','Oil')),'Value')=Tab2(strcmp(Tab2.Description,'FW'),'Value');
The or-part seems to be the problem. I want the Value of 'FW' from Tab2 as the Value of 'Gas' and 'Oil' in Tab1. My original table is way bigger, so seperate calculations like:
Tab1(strcmp(Tab1.Description,'Gas'),'Value')=Tab2(strcmp(Tab2.Description,'FW'),'Value');
Tab1(strcmp(Tab1.Description,'Oil'),'Value')=Tab2(strcmp(Tab2.Description,'FW'),'Value');
are not purposeful. Maybe an if-condition with
||
could help, but i dont know how.
I will greatly appreciate any assistance.
3 Comments
madhan ravi
on 15 Apr 2019
Explicitly state how your output should look like.
Max Bornemann
on 15 Apr 2019
Max Bornemann
on 16 Apr 2019
Accepted Answer
More Answers (1)
You would use ismember() to find the rows of Tab1.Description that match a list of options.
ismember(Tab1.Description, {'Gas', 'Oil'})
However, you'll find out that this matches 6 rows but the data on the right hand side of the equal sign only produces 3 rows.
What I think you're trying to do is to assign those 3 values to all rows in Tab1 that are labeled 'Gas' and to assign those 3 values to all rows labeled 'Oil', too.
Tab1(strcmp(Tab1.Description,'Gas'),'Value')=Tab2(strcmp(Tab2.Description,'FW'),'Value');
Tab1(strcmp(Tab1.Description,'Oil'),'Value')=Tab2(strcmp(Tab2.Description,'FW'),'Value');
3 Comments
Max Bornemann
on 16 Apr 2019
Adam Danz
on 16 Apr 2019
Nice! Glad it worked out. My advice is to write the for-loop using separate lines rather than forcing it into a single line. It doesn't change the speed of performance - it's just more readable as separate lines.
Ben Cunningham
on 16 Apr 2019
Aye that's right.
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!