How to read the indivual elements of a column data?

1 vue (au cours des 30 derniers jours)
Hamza
Hamza le 24 Sep 2012
Dear All
I have a data say,
x= '96318.74847837'
'96319.62211352'
'96319.62351606'
'96319.62356237'
'96320.05952563'
'96320.49676119'
I want to read all the elements individually. For e.g. '96318.74847837'. In this '96' is the year and '318.74847837' is day of year. I want to display the years and day of years separately and then plot them against another set of data say 'longitude' L= 19.1, 20,19.5,20.1,20.0,20.1
Please help. Thanks

Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 24 Sep 2012
Modifié(e) : Azzi Abdelmalek le 24 Sep 2012
year=cellfun(@(y) y(1:2),x,'uni',false)
day=cellfun(@(y) y(3:end),x,'uni',false)
  1 commentaire
Hamza
Hamza le 24 Sep 2012
This works great.Great use of cellfun in fact.

Connectez-vous pour commenter.

Plus de réponses (3)

Jan
Jan le 24 Sep 2012
You can do this numerically or as string operation:
x = {'96318.74847837', ...
'96319.62211352', ...
'96319.62351606', ...
'96319.62356237', ...
'96320.05952563', ...
'96320.49676119'};
c = char(x);
year = cellstr(c(:, 1:2));
day = cellstr(c(:, 3:end));
% Or:
num = sscanf(sprintf('%s*', x{:}), '%g*');
day = rem(num, 1000);
year = round(num - day);
  1 commentaire
Hamza
Hamza le 24 Sep 2012
Thanks Jan. I like your solution. Working good.

Connectez-vous pour commenter.


Rodrigo
Rodrigo le 24 Sep 2012
It's not clear, but it seems like x is a cell array containing strings. If you want to extract the year and the day then you might do something like:
year=zeros([1,numel(x)]); day=year; for p=1:numel(x) year(p)=str2double(x{p}(1:2)); day(p)=str2double(x{p}(3:end)); end
if you have multiple years, it may make sense to do:
day=day+365.25*(year-min(year));
so that you don't get wrapping of the dates
  1 commentaire
Hamza
Hamza le 24 Sep 2012
Thanks Rodrigo. It is a bit too complex for a simple problem. Below two solutions worked great and did the job.

Connectez-vous pour commenter.


Andrei Bobrov
Andrei Bobrov le 24 Sep 2012
Modifié(e) : Andrei Bobrov le 24 Sep 2012
t = str2double(x)';
year1 = fix(t/1000);
day1 = t - year1*1000;
  3 commentaires
Andrei Bobrov
Andrei Bobrov le 24 Sep 2012
Thank you, Azzi! Corrected.
Hamza
Hamza le 24 Sep 2012
Very simple and elegant. Great man! Thanks

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by