Merging two categorical columns using a rule

4 visualizaciones (últimos 30 días)
Wendy Cameron
Wendy Cameron el 11 de Mayo de 2018
Comentada: Wendy Cameron el 12 de Mayo de 2018
Hi,
I am wanting to merge/add 2 categorical columns but need to use a rule.
For example a= [Flowering not not not], b=[not not not budburst] and I want the final output to be c=[Flowering not not Budburst]?
Basically, when merging/adding the two vectors, I want the word "flowering" or "budburst" to take precedence over "not". "Flowering" will never clash with "budburst" and "not "not" would give a "not".
Thanks, Wendy

Respuesta aceptada

Ameer Hamza
Ameer Hamza el 11 de Mayo de 2018
Editada: Ameer Hamza el 11 de Mayo de 2018
Here is one way
% Extracting data from yor file
data = readtable('phenology.xls');
a = categorical(data.A);
b = categorical(data.B);
% preparing default output vector
c = categorical(repmat({'not'}, size(a)));
indA = ~ismember(a, 'not');
indB = ~ismember(b, 'not');
c(indA) = a(indA);
c(indB) = b(indB);
isequal(c, data.C)
ans =
1 <--- The generated c is same as in your xls file.

Más respuestas (3)

Greg
Greg el 11 de Mayo de 2018
Make your categorical array ordinal (with "not" as the lowest value), then use c = max(a,b). This is only guaranteed to work since you said valid values won't conflict.
  3 comentarios
Greg
Greg el 12 de Mayo de 2018
Have a read of the documentation page " Ordinal Categorical Arrays ."
Basically, you specify the valueset (allowable entries) in order of smallest to largest:
valueset = {'not';'Budburst';'Flowering'};
var = categorical(a,valueset,'ordinal');
Wendy Cameron
Wendy Cameron el 12 de Mayo de 2018
Thank you, I've read that now and it seems to make even more sense the way you've written it here!.
Thank you very much. Wendy

Iniciar sesión para comentar.


Wendy Cameron
Wendy Cameron el 11 de Mayo de 2018
Hi,
I have attached some sample data. Basically I have columns A and B but want to get column C. I couldn't quite get the method above to work but I am very new to Matlab.
Thanks for your patience. Wendy
  1 comentario
Ameer Hamza
Ameer Hamza el 11 de Mayo de 2018
I just tested my code with your data and it is giving correct output. Can you tell which line is creating the error? Refer to my edited answer to see how to read data from the xls file.

Iniciar sesión para comentar.


Wendy Cameron
Wendy Cameron el 11 de Mayo de 2018
Yes that worked with the table I sent you as you describe. I get a 42 x 1 categorical - thank you very much. I'm now just trying to join that column into my original table. Join or interjoin might work.
Thanks, Wendy
  3 comentarios
Wendy Cameron
Wendy Cameron el 11 de Mayo de 2018
Brilliant, thank you - that works perfectly. I've learnt a lot thank you.
Very much appreciated.
Ameer Hamza
Ameer Hamza el 11 de Mayo de 2018
You are welcome.

Iniciar sesión para comentar.

Categorías

Más información sobre Tables en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by