Clear Filters
Clear Filters

"setdiff" operation getting reversed when using "categories" - Why??

3 views (last 30 days)
I have a table named "data" with one of the variables (categorical) being "Country". I am trying to merge all the categories that are not missing ("N/A") and after executing
land = setdiff(data.Country,"N/A")
in the workspace, "land" is a 9 x 1 categorical variable. This is perfect BUT when I execute
cats = categories(land)
"cats" becomes a 10 x 1 cell which includes the "N/A" that I got rid of using "setdiff" earlier.
WHY??
I want to use the "cats" in "mergecats(data.Country, cats, "Land")". Pls help.

Accepted Answer

Walter Roberson
Walter Roberson on 9 Jan 2020
Each categorical array has two parts: a list of category names, and a list of "codes" (indices) of the current contents of the array.
Taking a subset of a categorical array does not change the categories that are allocated. For example,
A = categorical({'dog', 'human'});
[A(2), A(1)]
The A(1) and A(2) each extract a single element of the categorical array, but doing so does not create a new categorical array in which the respective values are the only possible categories. If it did create a new categorical array restricted to the one category, then [A(2), A(1)] would have to synthesize a new categorical array with new code numbers and category order 'human', 'dog', but that is not what happens: A(1) is a categorical object with a single code but with category names left intact.

More Answers (0)

Categories

Find more on Tables in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!