Borrar filtros
Borrar filtros

merging column elements into one

2 visualizaciones (últimos 30 días)
MF
MF el 28 de Mzo. de 2016
Respondida: Roger Stafford el 28 de Mzo. de 2016
I have a matrix of 4 columns containing year in 1st column, month in 2nd, day in 3rd, and time in 4th. Is there a way to combine them into 1 column to get 'dd-mmm-yyyy HH:MM:SS' ?
Thanks
  2 comentarios
Walter Roberson
Walter Roberson el 28 de Mzo. de 2016
What is the datatype of your matrix? If it is a cell, then what is the format of each of the columns at present?
MF
MF el 28 de Mzo. de 2016
Editada: MF el 28 de Mzo. de 2016
double. For example:
year month day hour
2015 2 1 1

Iniciar sesión para comentar.

Respuestas (4)

Azzi Abdelmalek
Azzi Abdelmalek el 28 de Mzo. de 2016
Look at this example
v={'2016' '03' '02' '12:10:00';'2016' '03' '02' '13:20:00'}
out=arrayfun(@(x) [v{x,1} '-' v{x,2} '-' v{x,3} ' ' v{x,4}] , (1:size(v,1))','un',0)
  1 comentario
Azzi Abdelmalek
Azzi Abdelmalek el 28 de Mzo. de 2016
Editada: Azzi Abdelmalek el 28 de Mzo. de 2016
v=[2015 2 1 1;2016 2 10 2]
w=[v zeros(size(v,1),2)]
out=datestr(w,'yyyy-mm-dd HH:MM:SS')

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 28 de Mzo. de 2016
v={'2016' '03' '02' '12:10:00';'2016' '03' '02' '13:20:00'}
strcat(v(:,1),{'-'},v(:,2),{'-'},v(:,3), {' '}, v(:,4))
but only if v happens to be in the correct format already, which is something we do not know yet as you have not replied about what the format of your array is.
  1 comentario
MF
MF el 28 de Mzo. de 2016
my v is a 9834x5 double matrix

Iniciar sesión para comentar.


Stephen23
Stephen23 el 28 de Mzo. de 2016
Editada: Stephen23 el 28 de Mzo. de 2016
Use datstr and cellstr:
>> M = [2016,03,28,12;2015,2,1,1]
M =
2016 3 28 12
2015 2 1 1
>> M(:,6) = 0;
>> C = cellstr(datestr(M,'dd-mmm-yyyy HH:MM:SS'));
>> C{:}
ans = 28-Mar-2016 12:00:00
ans = 01-Feb-2015 01:00:00
You can read the documentation and pick the date format that suits your needs best.

Roger Stafford
Roger Stafford el 28 de Mzo. de 2016
You can easily compress seconds, minutes, hours, days of the month, months, and years into one double precision floating point number. It has more than enough capacity. Let T be a vector with six elements: [year number, month number, day of month number, hour, minutes, seconds]. To convert to a single 'double':
d = T(6)+64*(T(5)+64*(T(4)+64*(T(3)+64*(T(2)+64*T(1)))));
(There is room here to go up past the year 8000000.) To convert back to T vector:
function T = dec2base64(d)
T = zeros(1,6);
for k = 6:-1:2
q = floor(d/64);
T(k) = d - 64*q;
d = q;
end
T(1) = d;
return

Categorías

Más información sobre Dates and Time en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by