2013-02-26 5 views
0

У меня есть матрица, содержащая дату в структуре ячейки. Мне удалось преобразовать дату (второй столбец) с помощью datenum(), но я не уверен, как добавить на время (3-й столбец)Преобразование ячейки на сегодняшний день в Matlab с использованием данных?

Данные выглядит следующим образом:

'IBM' 20090602 0 108.410000000000 
    'IBM' 20090602 500 108.560000000000 

Мой код:

date = datenum(num2str(IBM(:,2)),'yyyymmdd') 
+0

Вы пробовали 'date = datenum (IBM (:, 2),' yyyymmdd ') '? –

+0

Да, мне удалось исправить это с помощью num2str, но теперь у меня есть другая проблема. – Louise

ответ

1

Давайте рассмотрим ваши ошибки первого:

  1. Вы кормите datenum строкой 'IBM(:, 2)' вместо фактического массива. Отмените кавычки.
  2. datenum принимает строки, а не числовые значения.

Возможное решение преобразующий второй столбец данных в массив строк, и подачи его в datenum, например, так:

d = datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd'); 

Обратите внимание, что это, конечно, возможно только, если формат строки даты фиксирован в каждой строке.

EDIT:
Для добавления значения в третьем столбце в результате datenum, просто сделайте следующее:

d + vertcat(IBM{:, 3}) 

Где d является вектор-столбец значений даты получены из datenum (I предположим, что вы хотите сделать базовое добавление, так как вы не указали фактическое значение значений timje в третьем столбце).

В одной строке, полный ответ будет выглядеть следующим образом:

datenum(num2str(vertcat(IBM{:, 2})), 'yyyymmdd') + vertcat(IBM{:, 3}) 
+0

Благодарим за отзыв. Мне удалось использовать num2str для столбца даты, но он не работает для столбца времени. Есть ли способ добавить время к дате? – Louise

+0

Вы следовали моему решению? Это больше, чем использование 'num2str'. Что это не работает для вас? –

+0

Итак, я попытался добавить дату в качестве части ввода данных(): number = cell2mat (IBM (:, 2)) * 100000 + cell2mat (IBM (:, 3)); date = дата (num2str (vertcat (number)), 'yyyymmddHHMMSS'); , и я получаю «Неверная преобразование строки даты на номер даты» – Louise

0

Вы можете прямо вверх добавить значение времени в том, когда вы конвертируете в datenum. Просто конвертируйте из того, что я предположил, это минуты (если они в секундах, добавьте еще * 60 в делитель) до дней, что MATLAB использует для своих вычислений данных.

timestamps = cellfun(@(x,y) datenum(num2str(x),'yyyymmdd')+y/(24*60),... 
IBM(:,2),... 
IBM(:,3),... 
'UniformOutput',false)