I want to create a new column with words that are atributed regarding the numerical values of another column. How can I proceed?

1 view (last 30 days)
I have a column with "consumption" and values range between 3000 and 8000.
From 3000 to 4000, I want "low" in the new column; From 4000 to 7000, I want "medium"; From 7000 to 8000, I want "high".
How can I create this new column?

Accepted Answer

Walter Roberson
Walter Roberson on 24 Oct 2016
It is not possible to put a string into a numeric matrix. You will need to use a table() or a cell array.
NewColumn = repmat( {''}, length(consumption), 1);
mask = consumption >= 3000 & consumption <= 4000;
NewColumn(mask) = cellfun(@(S) [S, 'low'], NewColumn(mask), 'Uniform', 0);
mask = consumption >= 4000 & consumption <= 7000;
NewColumn(mask) = cellfun(@(S) [S, 'medium'], NewColumn(mask), 'Uniform', 0);
mask = consumption >= 7000 & consumption <= 8000;
NewColumn(mask) = cellfun(@(S) [S, 'high'], NewColumn(mask), 'Uniform', 0);
The code would be considerably simpler if your ranges did not overlap -- you have defined 4000 as belonging to both low and medium, and you have defined 7000 as belonging to both medium and high.
  2 Comments
Walter Roberson
Walter Roberson on 24 Oct 2016
I will have to guess about which way you want the overlap to be resolved.
NewColumn = cell( length(consumption), 1 );
NewColumn(consumption < 3000) = {'Forest Fire'};
NewColumn(consumption >= 3000 & consumption < 4000) = {'low'};
NewColumn(consumption >= 4000 & consumption < 7000) = {'medium'};
NewColumn(consumption >= 7000 & consumption < 8000) = {'high'};
NewColumn(consumption >= 8000) = {'Forest Fire'};
Only you can prevent Forest Fires.

Sign in to comment.

More Answers (0)

Categories

Find more on Characters and Strings 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!