converting abbreviation of months to numerical value

10 views (last 30 days)
I have a large 1244x1 cell that contains jan, feb, mar,...ect and repeats. Is there an easy way to convert these to their respective numerical value (jan = 1, feb = 2, ...).
Thanks!

Answers (3)

Ameer Hamza
Ameer Hamza on 20 Oct 2020
Try something like this
C = {'jan', 'Mar', 'feb'}; % for example
M = month(cellfun(@(x) datetime(x, 'InputFormat', 'MMM'), C));
  2 Comments
Ted McG
Ted McG on 20 Oct 2020
I am receiving the following error now:
Error using project (line 27)
Subscripting into a table using one subscript (as in t(i)) or three or more
subscripts (as in t(i,j,k)) is not supported. Always specify a row subscript
and a variable subscript, as in t(rows,vars).
Ameer Hamza
Ameer Hamza on 20 Oct 2020
Is your data available as a table? Can you attach it as a .mat file?

Sign in to comment.


Stephen23
Stephen23 on 20 Oct 2020
ismember makes this easy:
>> D = {'mar','apr','nov','may'}; % your data
>> C = {'jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'};
>> [~,X] = ismember(lower(D),C)
X =
3 4 11 5

Star Strider
Star Strider on 20 Oct 2020
Another approach:
mnth_nr = @(mth) find(strcmpi(mth, {'jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'}));
This works with a single input:
Out = mnth_nr('May')
producing:
Out =
5
and can be vectorised using cellfun with a table:
T1 = cell2table({'Feb'; 'jul'; 'Dec'}) % Create Table To Test Code
Out2 = cellfun(@(x)mnth_nr(x), T1.Var1)
producing:
T1 =
3×1 table
Var1
_______
{'Feb'}
{'jul'}
{'Dec'}
Out2 =
2
7
12
.

Categories

Find more on Data Type Conversion 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!