changing the date form in a cell matrix

1 次查看(过去 30 天)
Dear all,
i have the following cell matrix
A = {
[1] 'SLO' ' ' '' ''
[1] 'SLO' ' ' '' ''
[1] 'SLO' ' ' '' ''
[1] 'SLO' 'M 2009' 'SLO' 'MA'
[1] 'SLO' 'A 2009' 'SLO' 'MA'
[1] 'SLO' 'M 2009' 'SLO' 'MA'
[1] 'SLO' 'J 2009' 'SLO' 'MA'
[1] 'SLO' 'J 2009' 'SLO' 'MA'
[1] 'SLO' 'A 2009' 'SLO' 'MA'
[1] 'SLO' 'S 2009' 'SLO' 'MA'
[1] 'SLO' 'O 2009' 'SLO' 'MA'
[1] 'SLO' 'N 2009' 'SLO' 'MA'
[1] 'SLO' 'D 2009' 'SLO' 'MA'
[1] 'SLO' 'J 2010' 'SLO' 'MA'
[1] 'SLO' 'F 2010' 'SLO' 'MA'
[1] 'SLO' 'M 2010' 'SLO' 'MA'
[1] 'SLO' 'A 2010' 'SLO' 'MA'
[1] 'SLO' 'M 2010' 'SLO' 'MA'
[1] 'SLO' 'J 2010' 'SLO' 'MA'
[1] 'SLO' 'J 2010' 'SLO' 'MA'
[1] 'SLO' 'A 2010' 'SLO' 'MA'
[1] 'SLO' 'S 2010' 'SLO' 'MA'
[1] 'SLO' 'O 2010' 'SLO' 'MA'
[1] 'SLO' 'N 2010' 'SLO' 'MA'
[1] 'SLO' 'D 2010' 'SLO' 'MA'
[1] 'SLO' 'J 2011' 'SLO' 'MA'
[1] 'SLO' 'F 2011' 'SLO' 'MA'
[1] 'SLO' 'M 2011' 'SLO' 'MA'
[1] 'SLO' 'A 2011' 'SLO' 'MA'
[1] 'SLO' 'M 2011' 'SLO' 'MA'
[1] 'SLO' 'J 2011' 'SLO' 'MA'
[1] 'SLO' 'J 2011' 'SLO' 'MA'
[1] 'SLO' 'A 2011' 'SLO' 'MA'
[2] 'KKK' ' ' ' ' ''
[2] 'SLO' ' ' ' ' ''
[2] 'SLO' ' ' '' ''
[2] 'SLO' 'M 2009' 'SLO' 'MA'
[2] 'SLO' 'A 2009' 'SLO' 'MA'
[2] 'SLO' 'M 2009' 'SLO' 'MA'
[2] 'SLO' 'J 2009' 'SLO' 'MA'
[2] 'SLO' 'J 2009' 'SLO' 'MA'
[2] 'SLO' 'A 2009' 'SLO' 'MA'
[2] 'SLO' 'S 2009' 'SLO' 'MA'
[2] 'SLO' 'O 2009' 'SLO' 'MA'
[2] 'SLO' 'N 2009' 'SLO' 'MA'
[2] 'SLO' 'D 2009' 'SLO' 'MA'
[2] 'SLO' 'J 2010' 'SLO' 'MA'
[2] 'SLO' 'F 2010' 'SLO' 'MA'
[2] 'SLO' 'M 2010' 'SLO' 'MA'
[2] 'SLO' 'A 2010' 'SLO' 'MA'
[2] 'SLO' 'M 2010' 'SLO' 'MA'
[2] 'SLO' 'J 2010' 'SLO' 'MA'
[2] 'SLO' 'J 2010' 'SLO' 'MA'
[2] 'SLO' 'A 2010' 'SLO' 'MA'
[2] 'SLO' 'S 2010' 'SLO' 'MA'
[2] 'SLO' 'O 2010' 'SLO' 'MA'
[2] 'SLO' 'N 2010' 'SLO' 'MA'
[2] 'SLO' 'D 2010' 'SLO' 'MA'
[2] 'SLO' 'J 2011' 'SLO' 'MA'
[2] 'SLO' 'F 2011' 'SLO' 'MA'
[2] 'SLO' 'M 2011' 'SLO' 'MA'
[2] 'SLO' 'A 2011' 'SLO' 'MA'
[2] 'SLO' 'M 2011' 'SLO' 'MA'
[2] 'SLO' 'J 2011' 'SLO' 'MA'
[2] 'SLO' 'J 2011' 'SLO' 'MA'
[2] 'SLO' 'A 2011' 'SLO' 'MA'
[3] 'MMM' ' ' '' ''
[3] 'SLO' ' ' '' ''
[3] 'SLO' ' ' '' ''
[3] 'SLO' 'M 2009' 'SLO' 'MA'
[3] 'SLO' 'A 2009' 'SLO' 'MA'
[3] 'SLO' 'M 2009' 'SLO' 'MA'
[3] 'SLO' 'J 2009' 'SLO' 'MA'
[3] 'SLO' 'J 2009' 'SLO' 'MA'
[3] 'SLO' 'A 2009' 'SLO' 'MA'
[3] 'SLO' 'S 2009' 'SLO' 'MA'
[3] 'SLO' 'O 2009' 'SLO' 'MA'
[3] 'SLO' 'N 2009' 'SLO' 'MA'
[3] 'SLO' 'D 2009' 'SLO' 'MA'
[3] 'SLO' 'J 2010' 'SLO' 'MA'
[3] 'SLO' 'F 2010' 'SLO' 'MA'
[3] 'RRR' 'M 2010' 'SLO' 'MA'
[3] 'RRR' 'A 2010' 'SLO' 'MA'
[3] 'SLO' 'M 2010' 'SLO' 'MA'
[3] 'SLO' 'J 2010' 'SLO' 'MA'
[3] 'SLO' 'J 2010' 'SLO' 'MA'
[3] 'SLO' 'A 2010' 'SLO' 'MA'
[3] 'SLO' 'S 2010' 'SLO' 'MA'
[3] 'SLO' 'O 2010' 'SLO' 'MA'
[3] 'SLO' 'N 2010' 'SLO' 'MA'
[3] 'SLO' 'D 2010' 'SLO' 'MA'
[3] 'SLO' 'J 2011' 'SLO' 'MA'
[3] 'SLO' 'F 2011' 'SLO' 'MA'
[3] 'SLO' 'M 2011' 'SLO' 'MA'
[3] 'SLO' 'A 2011' 'SLO' 'MA'
[3] 'SLO' 'M 2011' 'SLO' 'MA'
[3] 'SLO' 'J 2011' 'SLO' 'MA'
[3] 'SLO' 'J 2011' 'SLO' 'll'
[3] 'SLO' 'A 2011' 'SLO' 'll'
}
My goal is to obtain this one
A = {
[1] 'SLO' ' ' '' ''
[1] 'SLO' ' ' '' ''
[1] 'SLO' ' ' '' ''
[1] 'SLO' '3/2009' 'SLO' 'MA'
[1] 'SLO' '4/2009' 'SLO' 'MA'
[1] 'SLO' '5/2009' 'SLO' 'MA'
[1] 'SLO' '6/2009' 'SLO' 'MA'
[1] 'SLO' '7/2009' 'SLO' 'MA'
[1] 'SLO' '8/2009' 'SLO' 'MA'
[1] 'SLO' '9/2009' 'SLO' 'MA'
[1] 'SLO' '10/2009' 'SLO' 'MA'
[1] 'SLO' '11/2009' 'SLO' 'MA'
[1] 'SLO' '12/2009' 'SLO' 'MA'
[1] 'SLO' '1/20010' 'SLO' 'MA'
[1] 'SLO' '2/2010' 'SLO' 'MA'
[1] 'SLO' '3/2010' 'SLO' 'MA'
[1] 'SLO' '4/2010' 'SLO' 'MA'
[1] 'SLO' '5/2010' 'SLO' 'MA'
[1] 'SLO' '6/2010' 'SLO' 'MA'
[1] 'SLO' '7/2010' 'SLO' 'MA'
[1] 'SLO' '8/2010' 'SLO' 'MA'
[1] 'SLO' '9/2010' 'SLO' 'MA'
[1] 'SLO' '10/2010' 'SLO' 'MA'
[1] 'SLO' '11/2010' 'SLO' 'MA'
[1] 'SLO' '12/2010' 'SLO' 'MA'
[1] 'SLO' '1/2011' 'SLO' 'MA'
[1] 'SLO' '2/2011' 'SLO' 'MA'
[1] 'SLO' '3/2011' 'SLO' 'MA'
[1] 'SLO' '4/2011' 'SLO' 'MA'
[1] 'SLO' '5/2011' 'SLO' 'MA'
[1] 'SLO' '6/2011' 'SLO' 'MA'
[1] 'SLO' '7/2011' 'SLO' 'MA'
[1] 'SLO' '8/2011' 'SLO' 'MA'
}
and so forth for the rest of the individuals
where as you can see in the third column I have replace for example the month 'M 2009' with '3/2009'.
In my case i have 30000 individuals
Is there any code for achieving this?
Thanks
  3 个评论
salva
salva 2012-7-26
编辑:salva 2012-7-26
perhaps by going one step back: that is this is my very original matrix
A={
1 'SLO' ' ' '' ''
1 'SLO' ' ' '' ''
1 'SLO' ' ' '' ''
1 'SLO' 'MA 2009' 'SLO' 'MA'
1 'SLO' 'MJ 2009' 'SLO' 'MA'
1 'SLO' 'JA 2009' 'SLO' 'MA'
1 'SLO' 'SO 2009' 'SLO' 'MA'
1 'SLO' 'ND 2009' 'SLO' 'MA'
1 'SLO' 'JF 2010' 'SLO' 'MA'
1 'SLO' 'MA 2010' 'SLO' 'MA'
1 'SLO' 'MJ 2010' 'SLO' 'MA'
1 'SLO' 'JA 2010' 'SLO' 'MA'
1 'SLO' 'SO 2010' 'SLO' 'MA'
1 'SLO' 'ND 2010' 'SLO' 'MA'
1 'SLO' 'JF 2011' 'SLO' 'MA'
1 'SLO' 'MA 2011' 'SLO' 'MA'
1 'SLO' 'MJ 2011' 'SLO' 'MA'
1 'SLO' 'JA 2011' 'SLO' 'MA'
2 'KKK' ' ' ' ' ''
2 'SLO' ' ' ' ' ''
2 'SLO' ' ' '' ''
2 'SLO' 'MA 2009' 'SLO' 'MA'
2 'SLO' 'MJ 2009' 'SLO' 'MA'
2 'SLO' 'JA 2009' 'SLO' 'MA'
2 'SLO' 'SO 2009' 'SLO' 'MA'
2 'SLO' 'ND 2009' 'SLO' 'MA'
2 'SLO' 'JF 2010' 'SLO' 'MA'
2 'SLO' 'MA 2010' 'SLO' 'MA'
2 'SLO' 'MJ 2010' 'SLO' 'MA'
2 'SLO' 'JA 2010' 'SLO' 'MA'
2 'SLO' 'SO 2010' 'SLO' 'MA'
2 'SLO' 'ND 2010' 'SLO' 'MA'
2 'SLO' 'JF 2011' 'SLO' 'MA'
2 'SLO' 'MA 2011' 'SLO' 'MA'
2 'SLO' 'MJ 2011' 'SLO' 'MA'
2 'SLO' 'JA 2011' 'SLO' 'MA'
3 'MMM' ' ' '' ''
3 'SLO' ' ' '' ''
3 'SLO' ' ' '' ''
3 'SLO' 'MA 2009' 'SLO' 'MA'
3 'SLO' 'MJ 2009' 'SLO' 'MA'
3 'SLO' 'JA 2009' 'SLO' 'MA'
3 'SLO' 'SO 2009' 'SLO' 'MA'
3 'SLO' 'ND 2009' 'SLO' 'MA'
3 'SLO' 'JF 2010' 'SLO' 'MA'
3 'RRR' 'MA 2010' 'SLO' 'MA'
3 'SLO' 'MJ 2010' 'SLO' 'MA'
3 'SLO' 'JA 2010' 'SLO' 'MA'
3 'SLO' 'SO 2010' 'SLO' 'MA'
3 'SLO' 'ND 2010' 'SLO' 'MA'
3 'SLO' 'JF 2011' 'SLO' 'MA'
3 'SLO' 'MA 2011' 'SLO' 'MA'
3 'SLO' 'MJ 2011' 'SLO' 'MA'
3 'SLO' 'JA 2011' 'SLO' 'll'
}
see also my previous question
Thomas
Thomas 2012-7-26
is MA March April? MJ -May June? and so on... do you have any data that says 'Jan 2009' ...?

请先登录,再进行评论。

采纳的回答

Thomas
Thomas 2012-7-26
Using the first A cell MAtrix shown in the question:
for ii=1:length(A)
A(ii,3)=strrep(A(ii,3),'S','SEP');
A(ii,3)=strrep(A(ii,3),'O','OCT');
A(ii,3)=strrep(A(ii,3),'N','NOV');
A(ii,3)=strrep(A(ii,3),'D','DEC');
A(ii,3)=strrep(A(ii,3),'F','FEB');
if strcmp(A(ii,3),A(1,3))
ii=ii+1;
else
if (cell2mat((strfind(A(ii,3),'J')))==1)
if (cell2mat(strfind(A(ii-1,3),'M')))==1
A(ii,3)=strrep(A(ii,3),'J','JUN');
elseif (cell2mat(strfind(A(ii-1,3),'J')))==1
A(ii,3)=strrep(A(ii,3),'J','JUL');
else
A(ii,3)=strrep(A(ii,3),'J','JAN');
end
end
if (cell2mat((strfind(A(ii,3),'M')))==1)
if (cell2mat(strfind(A(ii-1,3),'F')))==1
A(ii,3)=strrep(A(ii,3),'M','MAR');
else
A(ii,3)=strrep(A(ii,3),'M','MAY');
end
end
if (cell2mat((strfind(A(ii,3),'A')))==1)
if (cell2mat(strfind(A(ii-1,3),'J')))==1
A(ii,3)=strrep(A(ii,3),'A','AUG');
else
A(ii,3)=strrep(A(ii,3),'A','APR');
end
end
end
end
A(:,3) % output data
% convert to datenum
for ii=1:length(A)
if strcmp(A(ii,3),A(1,3))
ii=ii+1;
else
date_vec(ii)=datenum(A(ii,3),'mmm yyyy');
end
end

更多回答(1 个)

Davide Ferraro
Davide Ferraro 2012-7-26
编辑:Davide Ferraro 2012-7-26
The date has an ambiguous format cause "M 2009" can be march or may so a classic approac with DATENUM may not be appropriate. What I see is that you also have discontinuities.
A possible approach is to use a loop and at each step you check what letter you had the step before. I.e. if you find a M you check the previous line and if this an F you assume that M is March else it's May. A possible idea:
if A{i,3}(1) == 'M'
if A{i-1}(1) == 'F'
A{1,3} = ['3/' A{1,3}(2:end)];
else
A{1,3} = ['5/' A{1,3}(2:end)];
end
end
Surely you need to take care of all possible options and create a more complex IF-ELSE structure.

类别

Help CenterFile Exchange 中查找有关 Multirate Signal Processing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by