Simplify code with nested if

I have a matrix C in which every row contains dates and times. In the fourth column months are indicated as Jun, Feb, Mar, etc... I would like to replace such abbreviations with their corresponding numeric values: Jan->1, Feb->2, etc... My first attempt is:
for i=1:size(C,1)
if C(i,4)=='Jen' C(i,4)==1;
elseif C(i,4)=='Feb' C(i,4)==2; ... etc
end
end
Is there any way for simplify this code?

回答(1 个)

the cyclist
the cyclist 2019-10-21
编辑:the cyclist 2019-10-21
% A little pretend data, where I only fill in the 4th column with a few months
C = cell(5,6);
C(:,4) = {'Jan';'Jan';'Dec';'Mar';'Jul'};
% Replace the 4th column with the numeric indices
C(:,4) = num2cell(month(datetime(C(:,4),'Format','MMM')));

2 个评论

C(:,4) actually is like:
C(:,4) = {"Jan";"Jan";"Dec";"Mar";"Jul"};
your code doesn't work for this format
Try
month(datetime([C{:,4}],"Format","MMM"))
instead. That creates a string array from the cell array of strings, which is an allowed input to the datetime function.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Characters and Strings 的更多信息

产品

版本

R2019b

标签

Community Treasure Hunt

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

Start Hunting!

Translated by