gathering together specific elements from a column vector

HI all, I have the matrix
A=
identif pairs time allpairs
[1] 'PDL12' 'JF2008' [ NaN]
[1] 'PDL12' 'JF2009' [-1.0000e-004]
[1] 'PDL12' 'MA2009' [ -0.0330]
[1] 'PDL12' 'MJ2009' [ -0.0268]
[1] 'PDL12' 'JA2009' [ -0.0264]
[1] 'PDL12' 'SO2009' [ -0.1913]
[1] 'PDL12' 'ND2009' [ -0.0415]
[1] 'PDL12' 'JF2010' [ -0.0168]
[1] 'PDL12' 'MA2010' [ -0.0502]
[1] 'PDL12' 'MJ2010' [ -0.0761]
[1] 'PDL12' 'JA2010' [ -0.0429]
[1] 'PDL12' 'SO2010' [ -0.0548]
[1] 'PDL12' 'ND2010' [ -0.0173]
[1] 'PDL12' 'JF2011' [ 0.0071]
[1] 'PDL12' 'MA2011' [ 0.0121]
[1] 'PDL12' 'MJ2011' [ -0.0727]
[1] 'PDL12' 'JA2011' [ -0.1628]
[1] 'PDL12' 'SO2011' [ 0.0056]
[2] 'PDL13' 'JF2008' [ NaN]
[2] 'PDL13' 'JF2009' [ 0.0218]
[2] 'PDL13' 'MA2009' [ -0.0037]
[2] 'PDL13' 'MJ2009' [ 0.0120]
[2] 'PDL13' 'JA2009' [ -0.0027]
[2] 'PDL13' 'SO2009' [-5.0000e-004]
[2] 'PDL13' 'ND2009' [ -0.2818]
[2] 'PDL13' 'JF2010' [ -0.0216]
[2] 'PDL13' 'MA2010' [ -0.0330]
[2] 'PDL13' 'MJ2010' [ -0.0468]
[2] 'PDL13' 'JA2010' [ -0.1309]
[2] 'PDL13' 'SO2010' [ -0.0318]
[2] 'PDL13' 'ND2010' [ -0.0014]
[2] 'PDL13' 'JF2011' [ -0.0779]
[2] 'PDL13' 'MA2011' [ 0.0224]
[2] 'PDL13' 'MJ2011' [ -0.0662]
[2] 'PDL13' 'JA2011' [ -0.2187]
[2] 'PDL13' 'SO2011' [ -0.0745]
and I want to group all the observations that correspond to JF2008 (JF=January and February) as follows
1 PDL12 JF2008
2 'PDL13' 'JF2008' [ NaN]
then all the observations that correspond to the next months
[1] 'PDL12' 'MA2008' [ -0.0330]
[2] 'PDL13' 'MA2008' [ 0.0218]
and so forth... . And then for the year 2009 similarly to 2008
thanks in advance

2 comentarios

Do you want to sort the table according to the third and then second row?
antonet
antonet el 26 de Mayo de 2012
adrei bobrov gave the solution. thank you as well

Iniciar sesión para comentar.

 Respuesta aceptada

eg
k = cellstr(reshape(datestr(datenum(0,1:12,1,0,0,0),'m'),2,[])')
t = cellfun(@(x){x(1:2) x(3:end)},A(:,3),'un',0)
tt = cat(1,t{:})
[a,a] = ismember(tt(:,1),k)
[id,id] = sortrows([a,str2double(tt(:,2))],[2,1])
out = A(id,:)
OR
in this is case
out = A(reshape(reshape(1:size(A,1),[],2)',[],1),:)

5 comentarios

antonet
antonet el 26 de Mayo de 2012
thank you. the first code fits my case
antonet
antonet el 27 de Mayo de 2012
andrtei, I would also like to ask you something regarding the code
cellstr(reshape(datestr(datenum(0,1:12,1,0,0,0),'m'),2,[])')
you displayed above.
I want to do the same thing as before but for the following matrix
[1] 'PDL12' ' OCT 2008' [ 0.0073]
[1] 'PDL12' 'NOV 2008' [ 0.0100]
[1] 'PDL12' 'DEC 2008' [ 0.0149]
[1] 'PDL12' 'JAN 2009' [ 0.0081]
[1] 'PDL12' 'FEB 2009' [ 0.0055]
[1] 'PDL12' 'MAR 2009' [ 0.0099]
[1] 'PDL12' 'APR 2009' [ 0.0065]
[1] 'PDL12' 'MAY 2009' [ 0.0056]
[1] 'PDL12' 'JUN 2009' [ 0.0176]
[1] 'PDL12' 'JUL 2009' [ 0.0094]
[1] 'PDL12' 'AUG 2009' [ 0.0070]
[1] 'PDL12' 'SEP 2009' [ 0.0223]
[1] 'PDL12' 'OCT 2009' [ 0.0124]
[1] 'PDL12' 'NOV 2009' [ -0.0131]
[1] 'PDL12' 'DEC 2009' [ 0.0161]
[1] 'PDL12' 'JAN 2010' [ 0.0126]
[1] 'PDL12' 'FEB 2010' [ 0.0146]
[1] 'PDL12' 'MAR 2010' [ 0.0195]
[1] 'PDL12' 'APR 2010' [ 0.0378]
[1] 'PDL12' 'MAY 2010' [ 0.0414]
[1] 'PDL12' 'JUN 2010' [ 0.0356]
[1] 'PDL12' 'JUL 2010' [ 0.0276]
[1] 'PDL12' 'AUG 2010' [ 0.0860]
[1] 'PDL12' 'SEP 2010' [ 0.0258]
[1] 'PDL12' 'OCT 2010' [ 0.0354]
[1] 'PDL12' 'NOV 2010' [ 0.0375]
[1] 'PDL12' 'DEC 2010' [ 0.0366]
[1] 'PDL12' 'JAN 2011' [ 0.0203]
[1] 'PDL12' 'FEB 2011' [ -0.0078]
[1] 'PDL12' 'MAR 2011' [ -0.0158]
[1] 'PDL12' 'APR 2011' [ 0.0096]
[1] 'PDL12' 'MAY 2011' [ -0.0032]
[1] 'PDL12' 'JUN 2011' [ -0.0082]
[1] 'PDL12' 'JUL 2011' [ -0.0076]
[1] 'PDL12' 'AUG 2011' [ 0.0048]
[1] 'PDL12' 'SEP 2011' [ -0.0185]
[2] 'PDL13' ' OCT 2008' [ 0.0187]
[2] 'PDL13' 'NOV 2008' [ 0.0176]
[2] 'PDL13' 'DEC 2008' [ -0.0012]
[2] 'PDL13' 'JAN 2009' [ 0.0145]
[2] 'PDL13' 'FEB 2009' [ 0.0274]
[2] 'PDL13' 'MAR 2009' [ 0.0186]
[2] 'PDL13' 'APR 2009' [ -0.0106]
[2] 'PDL13' 'MAY 2009' [ -0.0034]
[2] 'PDL13' 'JUN 2009' [ 0.0230]
[2] 'PDL13' 'JUL 2009' [ 0.0231]
[2] 'PDL13' 'AUG 2009' [ 0.0030]
[2] 'PDL13' 'SEP 2009' [-7.0000e-004]
[2] 'PDL13' 'OCT 2009' [ 0.0015]
[2] 'PDL13' 'NOV 2009' [ -0.0241]
[2] 'PDL13' 'DEC 2009' [ 0.0227]
[2] 'PDL13' 'JAN 2010' [ 0.0133]
[2] 'PDL13' 'FEB 2010' [ 0.0110]
[2] 'PDL13' 'MAR 2010' [ 0.0142]
[2] 'PDL13' 'APR 2010' [ 0.0192]
[2] 'PDL13' 'MAY 2010' [ 0.0132]
[2] 'PDL13' 'JUN 2010' [ 0.0164]
[2] 'PDL13' 'JUL 2010' [ 0.0228]
[2] 'PDL13' 'AUG 2010' [ 0.0069]
[2] 'PDL13' 'SEP 2010' [ -0.0069]
[2] 'PDL13' 'OCT 2010' [ -0.0064]
[2] 'PDL13' 'NOV 2010' [ -0.0109]
[2] 'PDL13' 'DEC 2010' [ -0.0251]
[2] 'PDL13' 'JAN 2011' [ 0.0155]
[2] 'PDL13' 'FEB 2011' [ -0.0022]
[2] 'PDL13' 'MAR 2011' [ 0.0043]
[2] 'PDL13' 'APR 2011' [ 0.0132]
[2] 'PDL13' 'MAY 2011' [ 0.0113]
[2] 'PDL13' 'JUN 2011' [ -0.0026]
[2] 'PDL13' 'JUL 2011' [ 0.0011]
[2] 'PDL13' 'AUG 2011' [ 0.0131]
[2] 'PDL13' 'SEP 2011' [ 0.0142]
how can I do this using something similar to cellstr(reshape(datestr(datenum(0,1:12,1,0,0,0),'m'),2,[])')
thanks
antonet
antonet el 27 de Mayo de 2012
actually i want to modify your code
k = cellstr(reshape(datestr(datenum(0,1:12,1,0,0,0),'m'),2,[])')
t = cellfun(@(x){x(1:2) x(3:end)},A(:,3),'un',0)
tt = cat(1,t{:})
[a,a] = ismember(tt(:,1),k)
[id,id] = sortrows([a,str2double(tt(:,2))],[2,1])
out = A(id,:)
but I have problem doing it
thanks
Say the matrix you posted is called A:
[trash idx] = sortrows([cat(1,A{:,1}) datenum(A(:,3),'mmm yyyy')],[2 1]);
A(idx,:)
antonet
antonet el 27 de Mayo de 2012
Thank you oleg. it works!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Etiquetas

Preguntada:

el 26 de Mayo de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by